系统架构
文章平均质量分 55
志_祥
C/C++/Java高级程序员,系统架构师,WebKit专家,目前从事Chromium-Android内核开发。
展开
-
使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现
首先,是WSGI application文件:其次,原创 2017-10-16 21:47:08 · 725 阅读 · 0 评论 -
HTML5页面渲染性能的”程序转换“思路
做浏览器内核引擎的,一般都会考虑怎么做性能优化,这个优化实际上包括下面的内容:(1)内存占用的优化,特别是对于嵌入式设备尤其重要,chromium有个blimp thin client的模块,不知道有没有用处;(2)渲染性能的提高,注意核心就是尽量利用硬件GPU来做渲染,避免CPU计算和内存Copy的开销(3)网络IO性能的提高,改善页面加载、响应数据,乃至云加速压缩流量、广告过滤屏蔽原创 2016-06-22 20:43:32 · 1320 阅读 · 0 评论 -
Chromium的当前net/disk_cache/simple file模块没有实现缓存的原子更新
问题:当服务器端初始响应浏览器的HTTP GET请求并设置Date头部字段,浏览器缓存了cache的第一个版本;其后下一次请求revalidate时,浏览器设置If-Modified-Since,并期望得到一个304。不幸的是,浏览器却返回了200,并重新发回完整的response body响应。这种情况下,Chromium的net/disk_cache/simple file模块将尝试更新cac原创 2016-06-20 12:58:29 · 1048 阅读 · 0 评论 -
基于DevTools协议+Chromium headless的客户端爬虫框架
之前的做法是使用PhantomJS以及一个html+嵌套iframe包含目标网站URL+跨域dom操作的简单性能优化。PhantomJS实现下面的核心需求:(1)无头模式,然而PhantomJS内核基于老版本的QtWebKit,与最新版本的Chromium代码相比,版本太老了,很多特性用不了(虽然目前国内网站应该也还没开始用上这些?比如ServiceWorker、CSS Custo原创 2016-05-08 16:08:04 · 6231 阅读 · 0 评论 -
离线Web应用的3种加载策略
离线Web应用的3种加载策略1、离线(即从disk_cache中加载)作为在线加载的fallback当在线load过程遇到较大的IO延迟时,用户体验比较差2、优先从离线加载,但是同时可选地,后台启动在线加载,如果在线load发现有新版本,则替换掉离线的版本 (当然这里后半部分处理如果太复杂可以不做)3、同时启动离线(磁盘IO)和在线(网络IO),最原创 2016-02-02 22:15:56 · 1439 阅读 · 0 评论 -
Node.js微服务+流水线服务框架的设想
Node.js微服务+流水线服务框架的设想要点:每个微服务从代码实现来看,就是一个JS函数,输入是一个JSON对象,输出也是一个JSON对象框架负责将其转换为基于URL输入和输出的Web服务;统计每个微服务的每秒请求数、每秒IO量,以单独的options url公开,以便全局的性能统计模块进行后端服务集群的性能统计微服务支持动态的注册和重启:动态注册原创 2016-02-02 18:00:02 · 3363 阅读 · 0 评论 -
SOA的精髓在于面向接口做架构设计
SOA的精髓在于面向接口做架构设计这里的接口指的是可远程调用的接口,RPC、JSON,或者某些二进制封装的协议当然,一般情况下,基于HTTP/JSON的处理文本类型数据的性能已经足够好了每个Web服务的提高者分为有状态和无状态两种,爬虫不需要保存状态,但是爬取的数据的存储需要保存状态在支持分布式存储的NoSQL类存储系原创 2016-01-28 00:26:26 · 1673 阅读 · 0 评论 -
信息流聚合类系统(如RSS阅读器)中数据同步的架构设计
信息流聚合类系统(如RSS阅读器)中数据同步的架构设计目录1需求2基于时间戳的设计3基于每个用户消息队列的设计4书签(或网盘类应用)的双向同步问题需求要求支持用户能够用一个账号在多台设备上同步数据(这要求同步状态存储在服务器上)凡是需要在服务器存储用户状态数据的,需要评估存储容量的限制要求用户标记为已阅原创 2016-01-27 13:31:01 · 2176 阅读 · 0 评论 -
Python:数据流中查找特定子串的简单算法
Python:数据流中查找特定子串的简单算法目录1问题背景2定义:什么是数据流?3原始方法4学术上的标准方法5实用的简单算法问题背景HTTP的服务器响应包括响应头部(headers)和body。两者的分割标记是连续的2个\r\n,即\r\n\r\n 4字节的序列。现在的问题是,编写一个简单的算法,找到这个heade原创 2016-01-04 18:37:46 · 1983 阅读 · 0 评论 -
对象ID:生成id,还是hash id?
对象ID的2类生成算法:生成id,或者hash id。生成id一般常用的有数据库的auto_increment key,GUID等等(但GUID实际算根据网卡地址的hash id)。hash id一般有MD5、SHA1等,其主要特征是生成内容依据于原始对象的二进制数据表示。原创 2016-01-04 17:15:43 · 3159 阅读 · 0 评论 -
GIS习题:制作一个上海地铁(进一步考虑到公交)的最佳点到点路径规划生成算法?
Level1:仅考虑转车次数;Level2:考虑每段不转车的路程时间Level3:进一步考虑等待时间、列车拥挤程度等随机不可测因素如何用更简单的模型来建模这个“路径规划”问题呢?对于一般的图来说,有单源的Dijkstra算法,和生成全点对的Bellman-Ford但是问题是一般的图不会考虑节点在同一个平面的事实(节点在同一个平面跟平面图还不是一回事)原创 2016-01-04 17:00:46 · 1609 阅读 · 0 评论 -
Decentralized Applications(读书笔记)-O'Reilly 2016.8
Decentralized Applications:Harnessing Bitcoin’s Blockchain Technology目录1什么是去中心化应用2Dapp生态系统3创建你的第一个Dapp4OpenBazaar5Lighthouse(分布式众筹)6La'Zooz什么是去中心化应用拜占庭将军问题(即分原创 2016-07-31 19:32:11 · 1766 阅读 · 0 评论 -
Architecting HBase Applications-O'Reilly 2016(笔记)最有趣的部分就是Key如何设计了
Architecting HBase Applications目录1What is HBase?2HBase原则3HBase生态系统4Sizing and Tuning Overview5环境Setup6实现一个底层(记录)存储引擎7用例:近实时的事件处理8用例:作为数据管理工具9用例:文档存储10问题解决:Too原创 2016-08-09 20:56:02 · 1221 阅读 · 0 评论 -
Designing Data-Intensive Applications(设计数据密集应用)- O'Reilly 2017 读书笔记
Designing Data-Intensive Applications The Big Ideas Behind Reliable, Scalable, and Maintainable Systems目录1可靠性、可伸展性、可维护性2数据模型与查询语言3存储与检索4编码与演进5复制6分区7事务8分布式系统的麻烦9原创 2017-04-05 19:01:48 · 8844 阅读 · 0 评论 -
问题:C++编写的核心模块如何暴露给外部HTTP Web服务接口???
问题:C++编写的核心模块,其API调用接口是一个C/C++函数:输入是一个复杂的嵌套struct,输出也是一个复杂的嵌套struct(注意,这里的struct定义应该只用于序列化传输,不是内存表示,因此其内部应该包含指针类型、内部id引用等等),如何暴露给外部HTTP Web服务接口???方法0:使用C/C++编写http server模块的代码,借助ACE、Boost.Asio这些库来实现原创 2017-10-14 11:05:52 · 3407 阅读 · 2 评论 -
面向逻辑概念的虚拟编程
今天提出一个概念,是为“面向逻辑概念的虚拟编程”。什么是面向逻辑概念呢?其实这很好说明:关系数据库设计里有概念建模、(业务)逻辑建模、物理建模。编程也当然可以如此。而加上虚拟编程,是为了强调这种“编程”只是一种架构设计层次的思维游戏,它甚至不是伪代码。因为一般提到伪代码,实际上还是绑定到某种命令式编程语言,而伪代码的主要特征就是不一定能通过实际的编译。现在再次回到“面向逻辑概念“的原创 2017-10-11 00:18:28 · 765 阅读 · 1 评论 -
信息聚合系统的数据库后台(比如RSS订阅,feedly)应该如何设计?
我想起之前有研究生同学曾经参与一个实习项目,他们用SQL数据库来实现一个RSS订阅聚合系统,结果遇到了扩展性问题:当RSS源达到上千的时候,并发查询性能就已经下降到不可接受。之后我遇到的实用的信息聚合系统:Google阅读器、以及Feedly。Feedly的官方博客里说它的后台是用HBase来存的。我不禁好奇其数据架构设计到底是怎么做的。首先,容易想到的是,为每篇博客文章关联RSS源id(原创 2017-08-31 10:38:20 · 1525 阅读 · 0 评论 -
DHT里面Hash算法的设计,及其如何抵御极端情况下的DoS攻击?
DHT里,要存储的数据对象,本身根据其id(或者其内容本身),经过hash运算,映射到一个32位或者64位整数的区间范围。譬如可以使用密码学hash,如MD5、SHA1、乃至SHA256。Cassandra 3.0里使用的是Murmur3(非密码学hash)这里的问题是,既然是hash,就必然存在一种可能性:数据映射的目标区间的分布不均匀。——极端情况下,可能导致大部分数据都被映射到了原创 2017-08-30 17:55:45 · 947 阅读 · 0 评论 -
Cloud Native时代SaaS类Web应用的后端数据库架构设计:核心概念的简化:主键设计
云计算时代要求偏业务类的SaaS Web应用做到:可伸缩可扩展、高可用高并发。核心在于数据库后端架构设计。怎么做到这一点呢?引入微服务,将原来的单体Web应用拆分为多个分离的服务(实质就是数据库存储层的拆分,分库分表),以及敏捷/精益的项目管理思想(前者在于适应变化保证质量去除冗余,后者在于引入核心度量指标以改善),DevOps(价值有限,今早发布频繁发布)过程管理。而Cloud Native则要原创 2017-08-30 17:15:13 · 719 阅读 · 2 评论 -
分布式大数据存储:向上索引法
在Hadoop/HDFS里,namenode负责记录datanode的文件元信息,这样当小文件太多的情况下,namenode可能存在DoS漏洞。在实际使用中,namenode的SOP问题由增加冗余备份节点解决,小文件的问题则由引入容器封装的文件格式来解决。在HBase这类基于Master/Slave架构的大数据存储系统中,当出现数据倾斜(分布不均衡)时,将根据key的range自动切分,切分后原创 2017-09-15 20:27:43 · 1205 阅读 · 0 评论 -
关于推荐系统(Recommender System)推荐引擎的吐槽
# 关于推荐系统(Recommender System)推荐引擎的吐槽大数据的一个最原始的使用似乎就是从推荐系统开始的。尤其是B2C电子商务网站,为了多卖点商品给用户,或者是想让用户多消耗一点内容,当然是值得做的。但是目前这些现有的推荐系统做得怎么样呢?一个字:矬。拿亚马逊来说吧,我真想告诉它(假如它是个聪明的AI的话):我喜欢的书是翻译类的计算机编程、数学物理原创 2017-09-04 23:44:39 · 1729 阅读 · 0 评论 -
用NodeJS开发云计算时代Web服务的真正技术难点
因为前一阵子做项目用NodeJS/express开发了一个测试服务(代码现已从github删除,无非就是一个查询MySQL的REST/JSON接口的Web服务实现),一些感想:(1)基于NodeJS的Web服务开发实在不要太简单,其url routing、json序列化、express中间件配置,用起来都特别方便。OpenResty的作者春哥非常鄙视Node的嵌套callback的风格原创 2017-08-15 11:30:18 · 1472 阅读 · 0 评论 -
Practical Microservices-Packt Publishing(2017) 读书笔记
Practical Microservices-Packt Publishing(2017)-ReadingNotes.md微服务架构介绍boot2docker依赖于VirtualBox?那么docker的图形化界面app呢?docker命令是否自动从hub上下载镜像?Spring Boot:从maven pom.xml文件开始吗?starter项目可以自动生成的吧?定义微原创 2017-08-22 01:12:00 · 499 阅读 · 0 评论 -
《Mesos in Action》一些零碎的笔记(Mesos之于Kubernetes,犹如WebKit之于Chromium)
--resources="cpus(prod):8; mem(prod):16384; disk(prod):65536" //roles;4.1.3 Customizing Mesos slave resources and attributes ?? hardcode Types: scala, range, set --attributes="datacent原创 2017-05-15 16:51:31 · 570 阅读 · 0 评论 -
总结一下我所设想的推荐引擎怎么做
总结一下我所设想的推荐引擎怎么做1、建立一个关键词集合,必须满足像SQL索引那样的“选择性”,太高太低都不行;其次,这些关键词还应该尽量满足正交分解覆盖,比方说,不应该有2个关键词覆盖几乎相同的文档;2、把用户的搜索单词尽量导向关键词几何的某1个,这样就可以有结果了,用户的兴趣则可以用几个关键词的概率组合来表达3、确保用户可以通过搜索访问到所有的文档,否则就是理论上不完备了原创 2015-11-30 16:07:06 · 781 阅读 · 0 评论 -
[Chromium官方博客文章转载]Jank Busters Part One(UI Jank指的是界面来不及刷新导致的卡塞空白现象?
Jank Busters Part OnePlanet Chromium by Michael Hablich / 1d // keep unread // hide // preview Jank, or in other words visible stutters, can be noticed when Ch转载 2015-11-01 15:40:40 · 814 阅读 · 1 评论 -
Chromium代码:实现GPU->GPU的直接图片传递,不需要通过CPU进行中转
commit0c4e9d8781aea6e52fdb4a7aee978817910c67eaauthordongseong.hwang Thu Jan 08 20:11:13 2015committerCommit bot Thu Jan 08 20:12:02 2015media: Optimize HW Video to 2D Canvas copy.Currently,原创 2015-01-19 12:55:04 · 2622 阅读 · 0 评论 -
IRON/DLR:无名的“LambdaExpression”节点
Before execution, the entire expression tree must be wrapped in a function so that it can be executed. In the DLR, functions are represented asLambdaExpression nodes. While in most languages a lam转载 2015-01-31 15:56:41 · 911 阅读 · 0 评论 -
服务器端负载均衡技术的本质原理
1、什么是负载?负载就是服务器端的“资源”:主要就是CPU和IO。前者适宜于计算密集型的任务,后者则对应数据密集型的任务。2、负载均衡的前提就是负载(或者说CPU/IO资源)可以切分,划分到不同的计算机(或者CPU核)上去。要做到这一点,首先底层的运算应该是可以中断并调度的,IO是可以多路扩散的。否则一个简单的CPU死循环指令this: jmp this(跳回自己)就会原创 2014-11-06 16:10:35 · 1789 阅读 · 0 评论 -
Name Eevrything
写软件的最终境界不过就是无中生有。本来无一物,何处染尘埃?但是心如明镜台,总是难免不自安,勤擦拭的。从唯物主义的角度来看,精神世界无非是依托于物质世界存在的。从理论物理学来看,物质世界有可能是一个更高维度精神世界的投影(称为全息理论)从医学心理学的角度来看,所有的心理问题最终都可以归结为生理问题。你所有的自欺欺人,不过是你的身体哪里出了问题。对程序员来说,最难的原创 2014-11-19 23:18:59 · 971 阅读 · 0 评论 -
浏览器新实用功能开发研究:启动到浏览器(Fire OS, Chrome OS, Web OS)与浏览器容器化
启动到浏览器(Fire OS, Chrome OS, Web OS)与浏览器容器化本文试图阐明2种不同的技术方案:一个是启动到浏览器(如Fire OS, Chrome OS, HP Web OS, Tizen Web Rutime),另外一个我称为浏览器容器化启动到浏览器相信大家多少已经有了解,它就是通过底层的驱动支持、HTML5 Device API等等,把浏览器内核做成整个原创 2014-10-26 23:06:01 · 1394 阅读 · 0 评论 -
浏览器新实用功能开发研究:单页富客户端应用的会话/视图状态复制及远程同步功能
浏览器新实用功能开发研究:单页富客户端应用的会话/视图状态复制及远程同步功能目录1一个简单的使用场景2单页(富客户端)应用的会话/视图状态表示3状态复制及远程同步4SPA情景下的Web Cache变化一个简单的使用场景我之前成功地在3台机器上使用Google OAuth账户登陆过feedly,不幸的是,后来Google的账号登陆地址被原创 2014-10-26 22:46:02 · 1427 阅读 · 0 评论 -
High Performance Python 笔记(Python是门不错的语言,全栈程序员就用它好了!)
High Performance Python目录1Understanding Performant Python2Profiling3Lists and Tuples4Dictionaries and Sets5Iterators and Generators6Matrix and Vector Computation7Compil原创 2014-10-07 22:48:19 · 3500 阅读 · 0 评论 -
构建高性能Web站点(修订版)笔记
构建高性能Web站点(修订版)2012.6p14 ‘反馈机制’:逐包确认 --> 小batch连续发送一定需要全局编址吗?(可以使用邻居路由+端到端IBE)电磁波速度:铜线中电信号2.3*10^8,光纤约2*10^8(全反射增加了传输距离)系统负载:/proc/loadavg上下文切换:NmonIOWait(注意一点:磁盘IO是串行的!)减少系统调用... ZeroCopy?A原创 2014-11-09 19:46:49 · 2133 阅读 · 0 评论 -
在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项
在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项跳转至: 导航、 搜索目录1C++编译问题1.1从idl生成.h/.cpp失败?1.2VS编译器版本1.3名字导出问题1.4找不到int64_t类型?1.5Windows上需要pt原创 2014-09-16 10:04:02 · 2575 阅读 · 0 评论 -
解决隐私问题的一个绝妙方案:Big Shareable Browser
解决隐私问题的一个绝妙方案:Big Shareable Browserx原创 2014-09-15 10:34:47 · 962 阅读 · 0 评论 -
12306这样的超大规模实时事务系统到底应该怎么设计?其实不难
12306这样的超大规模实时事务系统到底应该怎么设计?%听说阿里要帮助12306重新设计订票系统,不过12306这个系统就真有这么难吗?是那些写软件的没有好好思考这个问题吧?显然,12306这个系统不同于一般的关系数据库,做系统架构设计必须考虑实际的应用业务流程和数据本身的性质才行。这么说吧,我不觉得这个问题有多困难,为了设计好这个系统,下面的几条是需要考虑的:原创 2015-01-17 13:31:49 · 1661 阅读 · 0 评论 -
Chromium Compositor线程架构(笔记)
来源参考:http://www.chromium.org/developers/design-documents/compositor-thread-architectureRender线程的stalls: 1,style recalc 2,sync network request 3,long painting times(复杂的页面内容?) 4,GCCompos原创 2014-12-31 18:47:20 · 1634 阅读 · 0 评论 -
high scalability网站上all-time-favorites聚合下的文章的阅读笔记
大部分文章似乎有点老了,不知道现在FB、Tumblr、Pinterest、Twitter这些网站的架构是什么样子的了。1、clustering vs sharding?自动/手动(需要去除join,添加cache,NoSQL似乎不如MySQL成熟?但HBase/Cassandra似乎又还可以)2、技术为业务服务,架构为应用服务,so创新在于发现真正的有价值的问题(需求)3、应用特定的数原创 2015-01-22 14:48:04 · 1333 阅读 · 0 评论 -
WebView文档截图的一个思路
文档截图的一个思路:(1)冻结视图的状态,停止一切js handler的执行,停止webkit timer;这里我们希望进一步remove掉一些fixed定位、设置了opacity的一些广告元素(2)在java端维护一个状态机,将整个文档截图拆分为连续的多个屏幕截图;(3)每次执行屏幕截图,然后,programmatically scroll webview,注原创 2015-11-23 14:45:39 · 545 阅读 · 0 评论