他们相信天堂是有的,可以实现的,但在现世界与那天堂的中间隔着一座海,一座血污海,人类泅得过这血海,才能登彼岸,他们决定先实现那血海。

P2P通讯的迷思与现实-去中心化理想与中心化现实的张力


引言

P2P(Peer-to-Peer,点对点)通讯常被描绘为一种乌托邦式的网络架构——节点之间直接对话,无需中介,信息自由流动。然而,当我们将这一理想置于真实的互联网环境中审视时,会发现"去中心化"并非一个非黑即白的开关,而是一个充满妥协与折中的光谱。

Read more ⟶

MongoDB副本集运维


一、MongoDB搭建三节点副本集

1.架构图

       Your App
           │
           ▼
   ┌───────────────┐
   │  MongoDB RS   │ ← 所有读写都发到这里(连任意节点)
   ├───────────────┤
   │ Node1 (Primary)│ ← 当前主节点(可写)
   │ Node2 (Secondary)│ ← 从节点(可读,自动同步)
   │ Node3 (Secondary)│ ← 从节点(可读,自动同步)
   └───────────────┘
  • 3 台物理机:每台运行一个 mongod 实例;
  • 无 mongos、无 config server:因为不是分片集群;
  • 自动选主:如果 Node1 宕机,Node2 或 Node3 自动升为 Primary。

即使是单机,也能配置副本集

Read more ⟶

苹果到底有多垃圾-讨贼檄文


注:本文对苹果公司和苹果粉丝攻击性极强,注意避让,必要时可准备速效救心丸。

今天,我们来喷一下工业垃圾-iOS手机。早日认清iOS真相,早日拥抱真善美。苹果罪大滔天,搞到百姓怨声载道! 苹果一日不死,IT界的工业设计水准就永远被拖后腿。

Read more ⟶

鸡肋的knox


网络上介绍Knox的文章很多,然而仅限于demo,很少有人真正深入使用过,更少见谈Knox缺点的文章。故写此博客

Konx简介

Apache Knox Gateway是一个应用程序网关,用于与Apache Hadoop部署的REST api和ui进行交互。Knox Gateway为与Apache Hadoop集群的所有REST和HTTP交互提供一个单一的访问点。

Read more ⟶

Python多播


多播协议是个好东西。 服务端

import socket
import struct

# 多播地址和端口
MULTICAST_GROUP = '239.0.0.110'
SERVER_PORT = 12345

# 创建 UDP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
# 允许地址重用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定端口
server_socket.bind(('', SERVER_PORT))

# 将套接字加入多播组
group = socket.inet_aton(MULTICAST_GROUP)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
server_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

print(f"Listening on multicast address {MULTICAST_GROUP}:{SERVER_PORT}...")

try:
    while True:
        # 接收数据
        data, client_address = server_socket.recvfrom(1024)
        message = data.decode('utf-8')
        print(f"Received message from {client_address}: {message}")

        # 向客户端发送响应
        response = "Message received successfully!"
        server_socket.sendto(response.encode('utf-8'), client_address)
except KeyboardInterrupt:
    print("Shutting down...")
finally:
    server_socket.close()

客户端

Read more ⟶

文件生成动态二维码


将图片/文件转为二维码动画

yum install qrencode 
test="$(cat dianlong.jpg| base64|tr '\n' ' '|sed 's/[[:space:]]//g')"
echo $test >> base64.txt #文件转base64
split -b 1k base64.txt 1_ #按1K分割
for x in $(find -type f  -name "1_*"); do cat $x|qrencode -o $x.png -s 4 ;done
ffmpeg -framerate 6  -pattern_type glob -i '1_*.png'  -loop 0 out1.gif #转GIF
ffmpeg -framerate 10  -pattern_type glob -i '1_*.png'  -c:v libx264 -pix_fmt yuv420p out.mp4
#计算帧数,验证
ffprobe -i out.mp4
ffmpeg -i out.mp4  -map 0:v:0 -c copy -f null -
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 out.mp4

还原:

Read more ⟶

Cpuid和序列号背后的那些故事


最近测试反馈了一个问题,每次重启服务器,我们某个版本的业务系统中的机器码都会改变,导致根据机器码算出来的许可证失效,从而使软件无法使用。 这个问题反馈了有一段时间了,但是本地一直没复现。然后前几天测试说又复现了,马上去看了下测试环境,服务器是一台国产化FT S2500服务器,验证了下,果然如此,马上去看了下关键代码。

Read more ⟶

进程Socket描述符的那些事


前几天看到有人发的一个面试题,问的是MySQL连接的进程描述符的问题。

在Linux里,一切皆文件,那进程描述符,实际就是文件描述符了。

我们还知道Linux 内核提供了一种通过 proc文件系统,/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。在 /proc文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。

Read more ⟶

Java安全策略配置和沙箱闲话


之前一篇文章提到了System.exit和SecurityManager,引入了下面的代码

public class SelfSecurityManager extends SecurityManager{
	..//
   @Override
    public void checkExit(int status) {
        super.checkExit(status);
        throw new ExitException(status);
    }
}

通过自定义SecurityManager来禁止System.exit的执行,这里我们来分析下其实现原理,看下super.checkExit方法

Read more ⟶

谁杀死了这个进程


之前文章提到服务器上一个进程启动后不到三分钟就挂掉,到底是什么原因挂掉了,这个问题可以写篇文章了。进程死了,无非就两种可能:自杀,他杀。他杀又包括第三方杀害和系统判死刑。

先来看自杀。

1.自杀

我们以Java为例,Java程序在main方法运行完就会退出,这种属于自杀。或者像下面这样

Read more ⟶