
沉思拾遗
文章平均质量分 53
romandion
创新缔造未来,专注铸就卓越
展开
-
交易系统【三】网关
网关主要面向互联网,技术核心就不是怎么将延迟降到微秒级别,没有意义,而是在处理好不稳定的网络状况后,保证业务的持续性。原创 2025-03-14 21:24:01 · 378 阅读 · 0 评论 -
交易系统【一】内存数据库
以股票行情为例,讨论在内存中应该如何设计低延迟的内存数据库。原创 2025-03-10 12:26:19 · 310 阅读 · 0 评论 -
纳秒级网络库【四】接口设计
重新设计网络库接口,这个非常重要。一则对应用层足够简单友好,二则确保底层能够实现低延迟。网络库实现可以分为两个大的部分:1、网络收发,这个容易理解,但对系统底层依赖较高。2、进程内分发,这个容易被忽视,但在纳秒级网络库中,同样非常重要。qkitc项目,主要实现进程内分发。一次echo收发,延迟从前一版本的2微妙降到当前版本的500纳秒,可以接受。原创 2024-07-31 15:40:40 · 713 阅读 · 0 评论 -
纳秒级网络库【三】架构设计
https://github.com/QuarkCloud/quark-daemon.git发布的第一个版本作为基准。虽然没有实现我们最终的目标纳秒级网络库,但是大部分思想已经具备,后续将继续调整和优化。原创 2024-06-24 16:01:49 · 467 阅读 · 0 评论 -
纳秒级网络库【二】技术选型
在十年之前,已经有网络产品实现7纳秒延迟,所以无需质疑是否能够实现,关键问题是:代价是什么。原创 2024-06-11 11:29:07 · 327 阅读 · 0 评论 -
纳秒级网络库【一】研发背景
硬件和软件技术在近几年发展神速,但在大众的视野中,网络技术仍然停留在十年之前,这一波技术红利并没有得到充分的应用。原创 2024-05-31 11:07:29 · 244 阅读 · 0 评论 -
高性能服务系列【十二】终篇:等待的代价
高性能服务系列的核心关键是减少等待时间,提升有效的CPU时间。假设一切都是正常的,没有低级错误,那么影响性能的几个因素,在之前几个篇章都提到过,这里做下总结。原创 2024-04-02 22:51:27 · 420 阅读 · 0 评论 -
高性能服务系列【十一】主题匹配
主题匹配核心算法就是字符串匹配,虽然是体现在应用层面上,但该算法效率最终会影响到服务性能,所以仍然有讨论的必要。原创 2024-03-26 13:25:52 · 567 阅读 · 0 评论 -
高性能服务系列【十】无锁队列
无锁结构本身就是为了提高性能,减少多线程互锁切换,导致的性能损失。因此,基于固定长度数组实现的无锁队列最为流行。无锁队列对于多读多写的算法虽然十分复杂,但原理可以从自旋锁进行推演出来。原创 2024-03-21 12:37:29 · 344 阅读 · 0 评论 -
高性能服务系列【九】内外网之分
反向代理和网关一样,是内外网的一个重要边界,通常运行在传输层之上的应用层。所以,性能就会受到两个重要因素的影响,网络IO和应用层编解码性能。如果将nginx作为内网的API网关,那么就是另外一个考量,现代网络传输技术,对其有巨大的加成。原创 2024-03-19 11:38:29 · 431 阅读 · 0 评论 -
高性能服务系列【八】C10M时代,网络IO库需要重建
现代网卡已经普遍支持10Gb,100Gb也不少见。为了解决C10K问题而提出的多路复用iocp/epoll解决方案已经无法提升性能的需求。内核TCP/IP协议栈延迟的占比就凸显出来,内核已经不是解决问题,而是问题本身。C10M时代已经到来了。原创 2024-03-14 12:34:45 · 434 阅读 · 0 评论 -
高性能服务系列【七】网络的延迟构成
在网络中,点到点的延迟,最大因素是物理距离。其次是RTO,超时重传。还有滑动窗口和拥塞控制算法。在高速网络中,比如40Gbps,甚至100Gbps的网络,网络传输速度已经和芯片内部的传输速度相差无几,对程序提出更苛刻的要求。原创 2024-03-13 14:06:57 · 505 阅读 · 0 评论 -
高性能服务系列【六】网络的有效载荷
网卡标注的是物理层比特流速度,并不是网络层的网速。要计算应用层的有效载荷,先根据网速计算出PPS,再扣去以太网帧,链路层,IP层、TCP层这些固定损耗,就能得出每个数据包最大和最小有效载荷。对于TCP稍微要麻烦点,因为有些ACK包,还有重传包,同样也会消耗掉有效载荷。原创 2024-03-10 19:45:21 · 570 阅读 · 0 评论 -
高性能服务系列【五】进程
进程是操作系统管理分配资源的基本单位,线程是操作系统调度CPU的基本单位,进程之间,是没有直接关系的。所以,一个进程的崩溃不会影响到另外一个进程的运行。基于这个特性,在追求高可靠的系统中,往往会采用多进程模型。原创 2024-03-07 13:39:56 · 353 阅读 · 0 评论 -
高性能服务系列【四】线程
线程之间同步采用互斥锁的粒度太大,容易导致等待,以及上下文切换。再后来又出现读写锁,减少锁的几率。自旋锁这种更低粒度的锁,避免线程切换的同时,也能避免内核态和用户态的切换,减少性能损失。原创 2024-03-05 11:12:37 · 364 阅读 · 0 评论 -
高性能服务系列【三】CPU和内存2
随着现代服务器主板上挂载的CPU越来越多,一个很显然的限制,就是FSB和北桥芯片的带宽跟不上,于是NUMA架构被提出。NUMA的几个特点,就是为了解决FSB和北桥芯片的瓶颈问题。原创 2024-03-03 22:29:20 · 382 阅读 · 0 评论 -
高性能服务系列【二】CPU和内存
在物理核上,主要有L1和L2高速缓存,L3高速缓存目前是片内共享的,即整个CPU内部共享的。更早之前,L2和L3是集成在主板上。L1高速缓存被拆分成L1d和L1i,即数据缓存和指令缓存。原创 2024-03-02 22:09:34 · 377 阅读 · 0 评论 -
高性能服务系列【一】序言
从最基础的硬件开始,到操作系统,到线程、进程,再到网络,顺带磁盘存储。以这些内容为基础,扩展分布式系统。中间穿插讲解一些关键技术的理解。原创 2024-03-02 21:51:51 · 454 阅读 · 0 评论 -
微服务讲堂--【6】系统稳定性
稳定性,通常是以可靠性来衡量,即我们常说的几个9,这个主题在之前各个系列文章中已经提到过,本来没有打算单独写一篇。前几天一个老同事在群里发出一个灵魂之问,“如何解决生产环境更新系统后的稳定性问题”。因此,觉得有必要再专门就这个主题做一个论述,也考虑这个主题内容实在太多了,以列举核心内容和纲要为主。在所有论述之前,必须深刻认识到两个核心原则:1、任何系统都会出错。要将可靠性从99%提高到99.9%,虽然只提高0.9%可靠性,但故障率降低了10倍,研发成本需要慎重考虑,极大可能也是要增加10倍。2、原创 2021-02-09 22:55:56 · 1140 阅读 · 0 评论 -
微服务讲堂--【5】系统自举
这里的“系统自举”借用了操作系统的概念。在操作系统启动之前,计算机要先加载自举程序,再由自举程序加载操作系统的启动程序。整个详细过程不在这里描述,可以在网络查阅相关资料。 为什么要在微服务系统中特别提及系统自举这个概念呢,因为这内容很重要,而且常常被忽略,以至于很多人对这个过程一无所知。这个部分过程之所以重要,因为他是整个微服务系统的起点。在微服务首次部署或者迁移、扩容的时候,都会面临一个问题,如何在一个空操作系统里,快速部署并启动一个微服务。 当一套应用系统,不论他是否是微服务...原创 2021-01-25 22:58:22 · 1227 阅读 · 1 评论 -
微服务讲堂--【4】风洞系统
一、系统特性风洞是以人工的方式产生并且控制气流,用来模拟飞行器周围气体的流动情况,并可测量气流对飞行器的作用效果以及观察物理现象的实验设备。这个定义来自百度百科,微服务和飞行器压根就搭不上边,之所以要在微服务架构中借用风洞的概念,用于形象描述一种自动化测试的解决方案,主要在于风洞有这么几点特性和这个解决方案极为相似。以下称飞行器模拟测试环境为【风洞】,称微服务模拟测试系统为【风洞系统】...原创 2020-04-28 15:29:31 · 1258 阅读 · 0 评论 -
如何利用qpid构建分布式总线
和所有基于Broker总线一样,qpid本身架构是联邦制的总线集群,这意味着,一份数据需要在多个broker之间互相备份。这个架构是AMQP定义的,本身并没有什么问题,因为AMQP是为交易而生的,对数据准确可靠的要求远远超过对性能的要求。我们看到在很多公有云中,也经常使用AMQP的另外一个实现RabbitMQ。和qpid一样,这两者之间基本可视为等价,知识每个供应商有所偏好,但各项指标...原创 2020-03-31 18:55:02 · 681 阅读 · 0 评论 -
微服务讲堂---【3】分布式架构
在写下其他文字之前,必须先声明下,这篇文章不是介绍讨论关于分布式技术的,而是讨论分布式架构在微服务架构中的价值和弊端。分布式技术经过多年的发展,已经相对很成熟,相关文章很多,所以不是本文的重点。在阅读下文之前,我推荐先阅读以下三篇文章,特别是最后一篇,有比较完整的阐述。http://2012.33degree.org/pdf/JamesLewisMicroServices.pdf htt...原创 2020-03-29 13:34:16 · 247 阅读 · 0 评论 -
落地系统解决方案探讨
落地系统的高收入让很多开发商趋之若鹜,但同样高昂的开发和维护成本,让很多开发商伤不起。扣去功能研发外,如何降低成本,是落地系统的解决方案不得不面对的关键。落地系统的最佳解决方案就是不落地,这话可不是在开玩笑,而是一个朴素的道理,能不落地的,尽量不落地。落地系统之所以有难度,主要在于以下几点痛点:1、落地系统是被部署于一个封闭的环境中,难以及时获取实时信息,运维和监控难度较大。这一点有点类似...原创 2020-02-16 22:48:24 · 2300 阅读 · 0 评论 -
软件工业
软件工业和软件产业、软件行业等词的定义不同,而是将软件开发过程等同于和其他制造业一样的性质。这个定义会让很多从业人员感到很不舒服。至少在多数人看来,软件开发人员都是在空调房中,舒舒服服,轻轻松松的敲着键盘,和流水线上,只需初中学历就可以干的活是有本质上的区别。但是让我们把时间拉长一点来看这件事情,会发现这个趋势是不可避免的。 在计算机出现之初,从业人员都是需要专门培训...原创 2018-08-23 09:18:48 · 764 阅读 · 0 评论 -
金融信息破局刍议【5】平台陷阱
乐视是不错的例子,贾跃亭以乐视生态的概念,靠着PPT,硬生生的把估值拉到千亿,不可谓不NB。但从另一方面来,一个生态链就是一个帝国,掌握生态链就帝王无异,躺着赚钱的节奏。这个想象空间,绝对能令很多人的荷尔蒙过量分泌。苹果的app store,马云的宝宝军团,马化腾的QQ微信帝国,以及诸多大型公司都是生态链模式下的顶级掠食者,都是满满的正能量。于是作为生态链的承载,平台就是必然的选项...原创 2018-08-20 17:22:42 · 224 阅读 · 0 评论 -
数据亲和架构--一致性
数据亲和架构强调数据和应用的绑定,这意味着,同一份数据是分布在多个服务的内存中,因此系统是分布式架构。关于分布式系统中,如何管理数据一致性的讨论和文章已经够多了,在此没有必要花太多文字复述一遍。这里更多的是从实践的角度来分析数据一致性问题。 在一个进程中,多个线程对同一个数据修改,顺序不同,会导致最终结果的不同。锁的机制实际上就确保线程按照顺序对数据进行修改,使得...原创 2018-09-04 15:31:03 · 393 阅读 · 0 评论 -
网络文档管理器的需求
我算是资深的网民了,每天有一半时间挂在网上,看网页,查资料。但很多时候感觉很不方便,对此有感而发。1、现在到网页上浏览,到处都是广告,想弄个可按需要拉内容的浏览器。比如到www.5ccc.net上看小说,实际上我绝大多数都只关注我书架上的文章。其他内容很多都没有必要,包括alimama的广告。2、最近csdn博客老无法访问,痛苦啊。当心自己的博客丢了,可是本地并没有备份。最好有个工具,能在原创 2009-04-01 15:09:00 · 1247 阅读 · 0 评论 -
数据亲和架构--子集筛选
之前谈到数据同步,但我们知道,业务服务使用的数据和存储的数据是不完全一样。服务用到的数据是存储数据集合或者混合衍生集合的子集。因此,进程之间数据的同步更像是物化视图的同步。除了Oracle外,mysql对物化视图并没有很好的支持。而且文件和NoSQL类的数据管理系统,也有类似的子集同步需求。 子集同步本身,我们需要将这个过程分成几个步骤。首先是内存中数据同步,其次...原创 2018-08-27 14:23:05 · 319 阅读 · 0 评论 -
数据亲和架构--数据同步
数据亲和架构核心要解决数据和程序的绑定问题,那么数据在进程间同步就尤为重要。因为性能的关系,增量同步是首选,全量同步只有在初始化或者出现异常的情况下,才会考虑。在流数据中,因为有时序,比较容易实现,而在静态数据中,比如文件或者数据库中,通常没有严格的时序,只有快照,要做增量比较困难。 以物理时间流动为参照系,任何一个数据集都可以分为某个时间点的快照,以及后续的变更。而...原创 2018-08-20 08:55:16 · 603 阅读 · 0 评论 -
金融信息破局刍议【4】长尾效应
谷歌的搜索引擎改变了广告方式,让门户网站和传统媒体很受伤;亚马逊让实体书店哀鸿遍地。这些企业在细微处改变了生活,让生活更加便利。携巨大的用户量,改变原来行业的游戏规则,让马车消失的是汽车,而不是其他马车。阿里巴巴收购大润发后,黄明端发文表示:他战胜了所有对手,却输给了时代。这个感慨犹如巨钟之音,震耳发聩。任何企业再大,竞争门槛再高,都离不开用户规模。金融信息本身并...原创 2019-10-26 17:24:09 · 387 阅读 · 0 评论 -
数据亲和架构--缘起
数据亲和架构并没有否定其他架构,尤其是微服务架构的合理性,而是从另外一个视角来重新审视整个架构,做出补充。让数据和业务逻辑具备更强的亲和性,故命名为数据亲和。 微服务架构提出了一个理念,每个服务划分成更细粒度的服务单元。每个单元的职能更加单一,降低了服务单元的复杂度和耦合性,但它同时增加系统整体复杂度,对运维体系提出更高的要求。 K8S和Docker解...原创 2018-07-13 10:42:59 · 315 阅读 · 0 评论 -
数据亲和架构--核心目标
数据亲和架构的核心目标,是为了解决微服务中的业务逻辑和数据绑定问题。使得业务逻辑在使用数据时,无需更多关注数据的传输和管理细节,确保数据在需要的时候,就能够使用。即使在微服务在异地重启或者多实例重启,数据也能够自动迁移和同步,无需被业务逻辑感知。如此一来,对于微服务来说,实现上与单实例没有太大差别。 在很多场合中,讲解微服务的优势,都要和单体架构比较。在实现业务单元时...原创 2018-07-23 16:42:38 · 354 阅读 · 0 评论 -
微服务讲堂--【1】前世今生
对于微服务,有很多说法,最权威的来自于Martin Fowler 的文章。对于微服务有很多讨论,有很多实践,也遇到很多问题。包装了很多新鲜的名词和概念,让人云里雾里。但我要说的是,太阳底下没有新鲜事,关于微服务的理念,实际上并不是横空出世,而是自然而然发展出的产物,历史上已经有类似的发展脉络。Martin Fowler同样也说,它可以追溯到unix设计原则。一、单进程的发展历史...原创 2018-09-08 14:55:32 · 309 阅读 · 0 评论 -
马云之退休
阿里巴巴宣布马云明年的今天退休了,不幸的是,正好赶在这几天刘强东的明州事件,事情就显得有点诡谲。作为中国极少数几个互联网巨头之一,甚至荣登首富宝座的马云,54岁的他正当企业家的壮年,连55周岁的女性退休年龄都未达到,就想着退休,确实令人费解。从常人的理解和我们受到的教育来说,一个有追求的人,都应该倒在自己的工作岗位上,才能够谈得上退休。君不见,李嘉诚90岁了,才在今年宣布退休;任正非...原创 2018-09-10 17:41:58 · 493 阅读 · 0 评论 -
油腻中年
今年40岁了,已经到了古人说的不惑之年,冯唐戏称的油腻中年。油腻中年也确实油腻,特别是码农,经常加班熬夜,最近买了洗面奶每天去油,感觉清爽了很多。 人到中年最大的感受是无力感。身体大不如前,啤酒肚如影随形,计划每天去健身跑步,都要靠毅力支撑,还会三天两头的中断。家有女儿初长成,都市人多,好学校少,竞争压力大。即使心急如焚,也得保持着微笑,讲解自己都被绕晕的奥数。家庭...原创 2018-09-27 14:46:03 · 503 阅读 · 2 评论 -
上海滨江健走有感
2019年3月8日一轮明月升云端,两行足印向远方。车马喧嚣夜正酣,漕舫争流为谁忙?几度寒暑离爹娘,谁人锦衣归故乡?岁月更新上海滩,碧水长流黄浦江。...原创 2019-03-12 14:11:21 · 382 阅读 · 0 评论 -
微服务讲堂---【2】审视RESTful
一、前因后果在写后续文字之前,首先申明两点:1、无意于引起编程语言和架构设计之争;2、对网页开发和使用Java、Python的程序员没有鄙视链。本文仅仅从自身经历过的事情,来讨论RESTful。我在金融软件开发领域工作多年,主要开发交易行情类和资讯类系统。经常遇到互联网领域,特别是做网页的同事,与此讨论关于系统架构的设计,是件令人头疼的事情。以行情发布系统为例,这系统不是像新浪财经,分钟级...原创 2019-03-06 12:18:04 · 386 阅读 · 0 评论 -
msvcrt-vs2017的编译机制
vs对于C/C++开发者来说,还是比较易用和友好的IDE。虽然我经常开发linux下的服务,也用过vi、kdeveloper、qtcreator等Linux下的IDE环境,但从开发效率而言,最终还是选择在VS下开发调试,再到linux下编译运行。跨平台部分可以简单地采用boost或者自己写一些简单地封装。vs的c++实现还算可以,但在posix c部分,差得很远。导致原生linux下的代码,在...原创 2019-03-01 12:28:03 · 1315 阅读 · 0 评论 -
qpid-lite,一个清晰版的qpid-amqp
qpid是一个伟大的软件,apache社区的顶级项目绝非徒有虚名。从2012年开始使用至今,在线上从未发生过事故,一直稳定运行。但从一个20年职业老鸟的角度来看源码的话,还是存在不少问题。一个直观的判断,qpid项目组应该是一群写java的程序员转行写c++代码,我在qpid项目源码中,看到太多java的编程技巧,或者他们是c++深度践行者。一、源码结构问题 1、代码...原创 2019-02-19 20:59:47 · 722 阅读 · 0 评论