分布式系统中的CAP理论与事务
当把单体服务按功能领域拆分成多个微服务模块,每个模块为高可用又做多个副本部署,一个完整的事务流程就需要多个微服务组合完成。分布式系统的核心问题,就是各个节点的状态如何同步。CAP定理就是对这个问题的理论描述。
1998年,Eric Brewer 提出,分布式系统有C、A、P三个关键指标,并且不能同时满足。
Consistency:一致性
Availability:可用性
Partition tolerance:分区容错性
CAP
Partition tolerance
分区容错性是分布式系统的一个关键特性,是系统遇到网络故障导致分区(即系统内的节点间通信因网络故障而被部分或完全切断)时,仍然能够继续服务的能力。由于网络本身的不稳定性,网络分区是一种可能出现的常...
如何在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...
如何在本地搭建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...
how to obfuscate a python project
一些场景下,需要对python源码进行混淆加密,可选成熟方案是使用 pyarmor。在调研过程中,一些使用说明过于简洁,因此留档此demo项目。
示例工程 https://github.com/sibosend/python_obfuscate_demo
频繁遇到package找不到的错误,关键在于需要对内部package分别进行混淆处理,见 pyarmor.py
todo:
混淆后项目的跨平台可执行性尚待实践。
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...
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网络, 通过挂载多块虚拟网卡打通各个子网间的路由。
...
21 post articles, 3 pages.