Home

分布式系统中的CAP理论与事务

当把单体服务按功能领域拆分成多个微服务模块,每个模块为高可用又做多个副本部署,一个完整的事务流程就需要多个微服务组合完成。分布式系统的核心问题,就是各个节点的状态如何同步。CAP定理就是对这个问题的理论描述。 1998年,Eric Brewer 提出,分布式系统有C、A、P三个关键指标,并且不能同时满足。 Consistency:一致性 Availability:可用性 Partition tolerance:分区容错性 CAP Partition tolerance 分区容错性是分布式系统的一个关键特性,是系统遇到网络故障导致分区(即系统内的节点间通信因网络故障而被部分或完全切断)时,仍然能够继续服务的能力。由于网络本身的不稳定性,网络分区是一种可能出现的常...

Read more

如何在Python中使用异步方式连接mysql

数据库请求是典型的 IO 密集型任务,因为它大部分时间都在等待数据库服务器的响应。因此,如果应用程序需要发起大量数据库请求,通过并发执行这些请求可以显著提升性能,在使用 FastAPI 进行 Web 开发时,我们经常需要在协程(即通过 async def 语句定义的函数)中发起数据库请求。本文记录了在不同场景下如何异步使用 SQLAlchemy 1. 安装所需依赖 conda create -n sql python=3.12 conda activate sql pip install SQLAlchemy==2.0.40 pip install aiomysql==0.2.0 pip install cryptography==44.0.2 sqlalchemy:SQ...

Read more

如何在本地搭建latex运行环境以及常用模版

Latex环境安装是非常繁琐的,本文记录下如何在本地电脑中使用OverleafToolkit和Docker-compose搭建Overleaf服务,来使用全部的latex功能,包括配置、镜像修改和启动服务的步骤。 安装 Overleaf step 1:clone项目 git clone https://github.com/sibosend/overleaf-toolkit.git cd ./overleaf-toolkit step 2: 初始化配置 bin/init ls config # config目录下会生成以下三个文件: overleaf.rc:顶级配置文件 variables.env:加载到 docker 容器中的环境变量 version:使用的 doc...

Read more

how to obfuscate a python project

一些场景下,需要对python源码进行混淆加密,可选成熟方案是使用 pyarmor。在调研过程中,一些使用说明过于简洁,因此留档此demo项目。 示例工程 https://github.com/sibosend/python_obfuscate_demo 频繁遇到package找不到的错误,关键在于需要对内部package分别进行混淆处理,见 pyarmor.py todo: 混淆后项目的跨平台可执行性尚待实践。

Read more

how to install blender as a python module on Ubuntu 20.04

在服务器上需要用到Blender bpy库来处理3D模型,发现普通安装过程非常难解决环境依赖问题,无论是 pip install bpy,还是按照官网推荐的 source code compile方式,都不容易走通。 解决方案是使用 wheel 方式安装,不用关心依赖关系了~ # 创建虚拟环境 conda create --prefix /folder/condaenv/blender python=3.10 conda activate /folder/condaenv/blender # 下载whl wget https://pypi.tuna.tsinghua.edu.cn/packages/9c/cf/536e231d0fff186e46668ae701f6788cdd7...

Read more

mac 下docker多个网段与host间网络互通

背景 在macos系统下,如果在docker内部署多个容器,每个容器使用不同的网段,如使用172.17.x.x / 10.x.x.x 网段,则需要解决从宿主机到各个容器的网络通信。 如果是使用其他Linux系统的用户则不用担心这个问题,Linux系统会自动帮我们处理好ip之间的互通(宿主机和各个容器之间)。而Mac想要直接访问容器的ip,则需要曲线救国,通过搭建一个vpn服务,然后通过vpn再去和容器的网段互联。 经过尝试openvpn成为了最佳的解决方案。 其中网络连通的原理,如下图所示,openvpn作为一个转接的桥梁。 该容器(openvpn)在Docker For Mac容器和主机Mac本身之间创建VPN网络, 通过挂载多块虚拟网卡打通各个子网间的路由。 ...

Read more

工程金句

要学会用后台思维写前端,算法思维写后台,产品思维写算法。我们做的不仅仅是功能,要让每一行代码都具备灵魂。

Read more