- 博客(21)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 分布式事务实战--go语言的saga事务
我们团队在引入go语言做微服务的过程中,遇见了分布式事务的强需求。我们的交易中心涉及大量的业务,包括了商品、库存、各类营销活动、商品权限等等,按照我们微服务的设计,需要拆分到多个微服务。原先由本地事务保证的ACID,现在需要分布式事务方案来保证交易的正确性。我们调研了大量开源项目,发现只有java提供了分布式事务的中间件,其他语言,暂未发现成熟的方案。这种背景下,我们内部开发了针对go语言分布式事务的DTM项目,线上稳定之后,我们将它开源出来,github地址为:yedf/dtm。虽然DTM最初针.
2021-07-03 11:20:22
704
原创 用python轻松完成一个分布式事务TCC,保姆级教程
什么是分布式事务?银行跨行转账业务是一个典型分布式事务场景,假设A需要跨行转账给B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的ACID,只能够通过分布式事务来解决。分布式事务就是指事务的发起者、资源及资源管理器和事务协调者分别位于分布式系统的不同节点之上。在上述转账的业务中,用户A-100操作和用户B+100操作不是位于同一个节点上。本质上来说,分布式事务就是为了保证在分布式场景下,数据操作的正确执行。什么是TCC分布式事务,TCC是Try、Confirm、Cancel三个词语的缩
2021-08-02 16:10:56
349
原创 分布式事务最经典的七种解决方案
随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家。基础理论在讲解具体方案之前,我们先了解一下分布式事务所涉及到的基础理论知识。我们拿转账作为例子,A需要转100元给B,那么需要给A的余额-100元,给B的余额+100元,整个转账要保证,A-100和B+100同时成功,或者同时失败。看看在各种场景下,是如何解决这个问题的。事务把多条语句作为一个整体
2021-07-13 19:04:02
377
单机千万并发连接实战(修订版)
c10k,c100k,c1000k等问题大家都已经司空见惯,那么10m(千万)并发连接呢?今天就来一起挑战一下。下面我们使用handy库自带的例子程序,来跑出一个单机千万并发连接的实例,先上操作步骤,后面解释。准备机器10m连接,大家的个人电脑肯定无法满足要求,如果不是在大公司任职,弄个实际的物理机对大家是个奢望。那么怎么办?我也面临同样问题。现在的云计算这么发达,还可以按...
2016-03-15 09:21:04
416
1
epoll LT/ET 深入剖析
epoll LT/ET 深入剖析EPOLL事件有两种模型:Level Triggered (LT) 水平触发.socket接收缓冲区不为空 有数据可读 读事件一直触发.socket发送缓冲区不满 可以继续写入数据 写事件一直触发符合思维习惯,epoll_wait返回的事件就是socket的状态Edge Triggered (ET) 边沿触发.socket的接...
2016-03-13 21:49:00
174
原创 epoll LT/ET 深入剖析
LT的编程与poll/select接近,符合一直以来的习惯,不易出错ET的编程可以做到更加简洁,某些场景下更加高效,但另一方面容易遗漏事件,容易产生bug
2016-03-13 21:16:38
8407
3
原创 千万并发连接注意点
对于一台服务器来说,支撑千万并发连接是一个挑战,我们来看看有哪些限制,并且如何解决首先是内存问题,默认设置下,系统为每个tcp连接分配4k的rmem和4k的wmem,那么一个连接需要8k的内存,1kw连接需要80G内存。 修改系统的这两个配置,改为1k的rmem和wmem,则需要的内存为20G,实际使用中还会有其他的内存开销,因此最好准备32G或更大的内存 sysctl -w net.ipv4.
2015-08-26 11:57:55
1125
原创 单机千万并发连接实战
c10k,c100k,c1000k等问题大家都已经司空见惯,那么10m(千万)并发连接呢?今天就来一起挑战一下吧。准备机器 10m连接,大家的个人电脑肯定无法满足要求,如果不是在大公司任职,弄个实际的物理机对大家是个奢望。那么怎么办?我也面临同样问题。 现在的云计算这么发达,还可以按小时计费,一小时的费用也就几元,那就试试云计算产品吧。小编先是在阿里云上测试,但阿里云的按需付费主机配置不高,
2015-08-26 11:43:36
4240
原创 半同步半异步高性能网络编程
网络编程的模式分为3种:1. nginx的全异步方式,使用epoll处理网络数据,对于请求的处理也完全是异步的。任何一个请求的处理如果花费了较长时间,那么nginx进程就会被处理操作阻塞,导致无法处理IO事件2. 简单的一个连接一个线程方案,这种方案无法处理大量并发的连接,适用mysql这类连接数不多的场景。其中也有一些优化的做法,例如使用线程池避免不断的创建销毁线程。3. 半同步半异
2015-07-27 10:52:02
2200
原创 阿里云 oss python3 例子
阿里云的oss SDK又是不支持python3,头疼头疼。本想改一改它的SDK,让它支持python2+python3,无奈里面大量的代码使用不带括号的print,工作量恐怖。幸好oss的使用非常简单,我翻了翻相关文档,弄了个简单可运行的例子(python2, python3都支持),主要的代码如下:aliyun-oss-python3请注意,需要填写自己的accessKeyId等相关信息
2015-07-22 16:02:11
4378
原创 kqueue示例
网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上。移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已。为了让大家不用像我一样再次花费大力气搞定kqueue,我整理了一个简单清晰可运行的kqueue例子,供大家参考。 kqueue一共有几个函数:int kqueue(void); //类似epoll_cr
2015-07-16 11:14:59
4762
1
原创 pip打包例子
使用pip把相关类库打包之后,就可以方便的使用pip工具进行一键安装。甚至可以把自己的包加入到官方pip服务器上,这样自己的服务器上面无需配置就可以直接命令安装。目录结构如下|-mypackage| |-file1|-setup.pysetup.py的内容如下:from setuptools import setup,find_packagessetup(
2015-07-14 11:37:04
1858
1
原创 非阻塞/异步(epoll) openssl
前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定。因此把相关的资料整理一下,并给出简单的例子,让后学者可以少费些力气。同步的openssl调用网上已经有许多的例子,这里就不再详细介绍,大家也可以直接读源代码:同步客户端:https://github.com/yedf/openss
2015-07-09 17:00:25
4148
1
原创 leveldb性能调优
许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎,例如tair,hbase,canssandra,因此理解并调优存储引擎可以大大的提高系统的性能。前一篇大致介绍了原理,这一篇接下来讲解调优相关的内容。leveldb中的写放大一条记录写到leveldb,则会写一次到log,写一次到level 0,随着后面更多数据的写入,level n里
2015-07-09 15:57:39
7110
原创 leveldb为什么这么快
nosql数据库大多采用leveldb或者类似leveldb的存储引擎,我们来看看它为什么能够这么快。levelDB则采用了一种全新的数据结构,叫做log structured merge tree(LSMT)
2015-07-09 14:23:48
3321
原创 10行代码编写一个c++服务器
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台。十行代码即可完成一个完整的网络服务器。下面是echo服务器的代码:#include >using namespace std;using namespace handy;int main(int argc, const char* argv[]) { EventBase bases; //事件
2015-07-07 10:29:25
2460
原创 epoll示例
epoll示例linux下的非阻塞网络编程必定离不开epoll。epoll的使用一共有三个函数:int epoll_create(int size);函数产生一个epoll句柄,其中size参数在linux内核2.6.8会被忽略,但一定要大约0。int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);epoll的事件注册函
2015-07-05 18:42:31
857
原创 阿里云 RDS SDK python3支持
最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见https://github.com/yedf/aliyun-python修改后的代码在python2.7.6以及python3.4.3上面测试通过主要的修改如下:1. p
2015-07-04 11:23:06
2459
原创 mako模板调试与使用技巧
django默认的模板太不灵活,想把一个数字0.15显示成15%都得费不少劲,太不爽!!!网上查阅了几个模板系统,有Jinja2等等,最后发现mako能够直接支持python的语句,最为灵活,果断选用。使用过程中碰见的问题不少,记录如下:1. 调试技巧:如果在mako的模板显示过程中出现问题,django的错误提示就一个字,“错”,剩下的,慢慢查吧,然后我挨个删除,挨个尝试
2015-07-04 11:19:43
1026
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人