架构
文章平均质量分 88
笑天居士
天下风云出我辈,一入江湖岁月催。皇图覇业谈笑中,不胜人生一场醉。
展开
-
关于高可用的系统
在《这多年来我一直在钻研的技术》这篇文章中,我讲述了一下,我这么多年来一直在关注的技术领域,其中我多次提到了工业级的软件,我还以为有很多人会问我怎么定义工业级?以及一个高可用性的软件系统应该要怎么干出来?这样我也可以顺理成章的写下这篇文章,但是没有人问,那么,我只好厚颜无耻的自己写下这篇文章了。哈哈。另外,我在一些讨论高可用系统的地方看到大家只讨论各个公司的技术方案,其实,高可用的系统并不转载 2016-08-25 17:03:47 · 2301 阅读 · 0 评论 -
RESTful 最佳实践
声明 本文属于转载:原文此文为实践总结,是自己在实践过程中积累的经验和"哲学"。部分内容参考相关资料,参考内容请看尾页。建议对RESTful有一定了解者阅读!"哲学"不要为了RESTful而RESTful在能表达清楚的情况下,简单就是美接口路径设计接口设计原则URI指向的是唯一的资源对象示例: 指向ID为clo转载 2014-08-18 07:56:39 · 1497 阅读 · 0 评论 -
用Supervisord管理进程
Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit。Monit和Supervisord的一个比较大的差异是Supervisord管理的进程必须由Supervisord来启动,Monit可以管理已经在运行的程序。Supervisord还要求管理的程序是非Daemon程序,Supervisord会帮你把它转成Daemon程序,因此如果用Supervisord来管理Nginx的话,必须在Nginx的配置文件里添加一行设置Daemon off让Nginx以非Daemon方式原创 2014-08-26 11:45:06 · 6109 阅读 · 0 评论 -
restful的实例论证
时下经常流行这各种概念型术语,一时间真的让很多人难以抓摸头脑。本文为大家讲解一下restful,以我的个人观点,带上实际例子来举证restful的优缺点和实现方法。什么是restful? restful相信大家或多或少有听说/使用过。如果您还不直到restful是啥玩意,可以点击维基的说明进行知识增进。 从维基的说明中,可以明确知道restful具有四种转载 2014-08-27 09:04:42 · 2325 阅读 · 0 评论 -
企业QQ SaaS团队,谈企业级LNMP架构设计
摘要:历经数年积累,腾讯企业QQ已入驻40000家付费企业,总用户数更超百万。本期,我们将带大家了解该服务的打造团队,以及这个基于LNMP的企业级SaaS平台架构与调优。对比IaaS和PaaS,SaaS得到的关注显然要少一些。究其根本,不仅因为SaaS关注的是功能方面的探索,更偏向于某个领域或层面的实际应用,还归结于相较前两者,软件的云化已基本趋于成熟,些许突破并不能带来产业上的变革。转载 2014-08-22 12:33:22 · 1953 阅读 · 0 评论 -
理解和配置 Linux 下的 OOM Killer
最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题。这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。转载 2014-08-09 15:06:11 · 1880 阅读 · 0 评论 -
STOMP协议说明书-1.2版
说明由于学习需要,本文是对STOMP协议规范1.2版的翻译记录。由于初学协议内容,翻译中如有不合适的地方,欢迎指正,谢谢!STOMP-1.2原文地址:http://stomp.github.io/stomp-specification-1.2.html摘要STOMP是一个专为实现客户端之间通过中间服务器进行异步通信的简单可操作的协议,它为这些互相通信客户端和服务器定转载 2014-08-22 11:04:15 · 3340 阅读 · 0 评论 -
Nginx通过LUA脚本访问RabbitMQ消息队列
发现了一个Nginx的LUA脚本:lua-resty-rabbitmqstomp,可以让Nginx通过LUA脚本访问RabbitMQ消息队列,这个脚本是通过stomp协议连接RabbitMQ的stomp适配器,来pub/sub消息的关于RabbitMQ-STOMP安装使用相关内容可以参见:RabbitMQ STOMP Adapter关于Nginx-LUA模块安装使用参见:LAMP架构演进到LAMPGC,再演进到LNMLGC关于STOMP协议相关资料参见这里:STOMP官方英文协议1.1版STOMP原创 2014-08-22 11:36:34 · 8723 阅读 · 0 评论 -
Stomp协议学习与实战-1.1版
最近工作中使用到Stomp协议,现在做个总结! Stomp是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档:http://stomp.github.com/stomp-specification-1.1.html 现在我们就来实践一下Stomp协议,你需要的是: 1.一个支持stomp消息协议的messaging server(譬如activemq,ra转载 2014-08-22 11:13:01 · 2227 阅读 · 0 评论 -
Basic HTTP Push Relay Protocol
简单的HTTP推协议1 介绍 1.1目的 本协议的初衷是提供一种HTTP客户端透明长连接的支持,在服务端连接大部分时间都是空闲的,也不会被中继传递。 1.2 一般性的说明 略 1.3 术语 本规范使用一系列的名词来指代协议中的碰到的对象。 服务器(server) 实现本协议的HTTP服务器。 客户端(client) 一个可以向HTTP服务器发起TCP/IP连接的程序。翻译 2014-08-21 13:53:00 · 1564 阅读 · 0 评论 -
中国移动网络下连接的秘密
一、TCP与HTTP0.所谓长连接短连接(其实都是TCP),都是谣传,在传输层混只有TCP和UDP。1.TCP传输的数据,绝对是顺序正确、不丢包的数据。否则它一定不会把数据扔给应用层。2.从应用层角度,TCP是一个数据流,收到的数据会聚在一起。所以需要应用层去协商数据与数据之间用什么间隔,比如常用的长度标识。3.TCP在网络恶劣的情况下,开始启动:拥塞避免算法 与 慢启动算转载 2014-08-07 07:58:45 · 3105 阅读 · 0 评论 -
移动互联网系统架构十大陷阱
Top 1.时不我待 连通性 cmwap cmnet这样的词语以后应该都会消失在人世间。三年前,经常性地有移不动联不通手机连不上服务器机房的情况。两年前,这种情况要好了一些。一年前,改善很多。现在还存在。相信未来会越来越好,时代在召唤!解法,花钱找有“背景”的机房。Top 2.生不逢时 HTML5 在去年的网络情况下,HTML5依旧不适合用来做优秀的app。前几年的时候,网速各种烂的情况下转载 2014-08-07 08:23:33 · 1171 阅读 · 0 评论 -
Bosh vs Comet vs Long Polling vs Polling
HTTP协议历史第一个HTTP协议诞生于1989年3月。第一个HTTP协议的版本是HTTP 0.9,它的组成极其简单,因为它只允许客户端发送GET这一种请求。HTTP协议的第二个版本是HTTP 1.0,直到HTTP 1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应,同样是建立并关闭一次连接。HTTP协议的第三个版本是HTTP 1.1,它就是目前使用最广泛的协转载 2014-08-07 07:57:53 · 1293 阅读 · 0 评论 -
谈谈创业公司的技术选型--朴素的技术观
创业公司的定义 把服务器数量在千台以内(如果存在服务端),或者业务没有爆发过或者是长时间没有爆发过的公司,叫做创业公司。朴素技术观的定义 有很多看上去很美好的技术,背后都有很多对应的很残酷的事实,在一个创业公司许多选择给你,你可以使用当前最炫的技术,也可以使用团队最擅长的技术。朴素世界观,是指所有选择使用团队最擅长技术的一种观念。语言 语言之争是最没品了,这里不争哪种语言好哪种语言转载 2014-08-07 08:31:31 · 1370 阅读 · 0 评论 -
在系统不同层次应该选用的工具
转载 2014-08-07 08:07:38 · 767 阅读 · 0 评论 -
缓存穿透与缓存雪崩
缓存穿透:查询一个必然不存在的数据。比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。解决办法:对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。缓存失效:如果缓存集中在一段时间内失效,DB的压力凸显。这个没有完美解决办法,但可以分析用户行为,尽量让失效时间点均匀分布。当发生大量的缓存原创 2014-07-15 12:10:37 · 1927 阅读 · 0 评论 -
Gearman分布式任务处理系统(四)Gearman协议
Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。一种简单的配置例子是这样的:转载 2013-11-14 23:23:04 · 4199 阅读 · 0 评论 -
Web 研发模式演变
原文地址:前不久徐飞写了一篇很好的文章:Web 应用的组件化开发。本文尝试从历史发展角度,说说各种研发模式的优劣。一、简单明快的早期时代可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 3-5 人搞定所有开发。页面由 JSP、PHP 等工程师在服务端生成,浏览器负责展现。基本上是服务端给什么浏览器就展现什么,展现的控制在 Web S转载 2014-08-19 11:14:26 · 2189 阅读 · 0 评论 -
Gearman分布式任务处理系统(八)开发讲解
这篇重点介绍C-Lib库及client和worker的开发,以0.14版libgearman for C来讲解Client APIclient初始化&析构gearman_client_st *gearman_client_create(gearman_client_st *client)void gearman_client_free(gearman_client_st原创 2013-11-15 14:03:53 · 6178 阅读 · 0 评论 -
一种基于“哨兵”的分布式缓存设计
14年双11大促缓存方案,今天有点闲暇时间,回顾一下当时的思路。场景介绍:大促活动下,对于某些产品进行整点秒杀活动。预计流量是平时峰值5+倍。商品计算逻辑比较复杂:某个最终展示的商品属性和价格,可能需要上亿次动态条件计算获得,动态条件每时每刻都在变化,并且商品的库存属性属于行业共有库存,每时每刻都在变化。计算模型:前端机并发去后端获取实时计算数据,然后合并结果,根据用户信息给商品打转载 2015-06-23 13:09:47 · 2027 阅读 · 1 评论 -
缓存更新的套路
原文地址:http://coolshell.cn/articles/17416.html看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中转载 2016-08-25 17:05:54 · 2017 阅读 · 0 评论 -
处理TAP国际漫游话单的几种类库使用方法
snacc这个库比较早,最早是1997年,2002年的版本是1.4,后面没有更新。在unix环境使用没问题,在linux环境下编译不过去。下面是unix环境下的使用方法。 - 升级make->gmakehttp://ftp.gnu.org/gnu/make/make-3.75.tar.gz编译snacc cd snacc/compiler make./snacc Usage: ./snacc原创 2016-05-07 21:34:21 · 2920 阅读 · 0 评论 -
58同城数据库架构最佳实践
数据库的基本概念基本概念这一块,主要是让大家就一些数据库方面的概念达成一致。首先是“单库”,最初的时候数据库都是这么玩的,几乎所有的业务都有这样的一个库。接下来是“分片”,数据库的分片是解决数据量大的问题。如果数据量非常大,就要做水平切分,有一些数据库支持auto sharding。之前58同城也用过两年mongoDB,后来发现auto sharding功能转载 2016-05-10 13:10:02 · 2029 阅读 · 0 评论 -
每秒处理10万订单乐视集团支付架构
随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增。作为商品购买的最后一环,保证用户快速稳定的完成支付尤为重要。所以在15年11月,我们对整个支付系统进行了全面的架构升级,使之具备了每秒稳定处理10万订单的能力。为乐视生态各种形式的抢购秒杀活动提供了强有力的支撑。一、库分表在redis,memcached等缓存系统盛行的互联网时代,构建一个支撑每秒十万转载 2016-05-10 12:55:10 · 1385 阅读 · 0 评论 -
用ElasticSearch,LogStash,Kibana搭建实时日志收集系统
介绍这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中。kibana负责查询elasticsearch并在web中展示。logstash收集进程收获日志文件内容后,先输出到redis中缓存,另一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题。原创 2015-06-30 12:20:21 · 5011 阅读 · 1 评论 -
Linux系统中对SSD硬盘优化的方法
http://blog.csdn.net/whycold/article/details/24985943这里说的优化是针对EXT4格式,因为看了很多国外网站的很多读写评测,目前来说,EXT4在SSD硬盘是最快的,所以推荐使用SSD硬盘的使用EXT4格式。优化方案如下:文章提到的fstab在/etc里面,可以直接运行"sudo gedit /etc/fstab"来修改转载 2016-04-06 13:44:43 · 10352 阅读 · 0 评论 -
Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。 除了最高位bit标记为不可用以外,其余三组转载 2016-02-22 09:06:16 · 1091 阅读 · 0 评论 -
Gearman分布式任务处理系统(十)后记(持续更新)
整理中。。。原创 2013-11-15 14:06:13 · 3336 阅读 · 0 评论 -
神秘的40毫秒延迟与 TCP_NODELAY
最近的业余时间几乎全部献给 breeze 这个多年前挖 下的大坑—— 一个异步 HTTP Server。努力没有白费,项目已经逐渐成型了, 基本的框架已经有了,一个静态 文件模块也已经实现了。写 HTTP Server,不可免俗地一定要用 ab 跑一下性能,结果一跑不打紧,出现了一个困扰了我好几天的问题:神秘的 40ms 延迟。Table of Contents1 现象2 背后的原转载 2016-01-07 19:01:48 · 3368 阅读 · 0 评论 -
Elasticsearch 免费认证插件Search-guard的部署安装及策略配置
背景:当前es正在被各大互联网公司大量的使用,但目前安全方面还没有一个很成熟的方案,大部门都没有做安全认证或基于自身场景自己开发,没有一个好的开源方案es官方推出了shield认证,试用了一番,很是方便,功能强大,文档也较全面,但最大的问题是收费的,我相信中国很多公司都不愿去花钱使用,所以随后在github中找到了search-guard项目,接下来我们一起来了解并部署此项目到我们转载 2015-09-14 09:53:52 · 10879 阅读 · 0 评论 -
架构之路(二):性能
架构的目标,只有一个,就是可维护性。完全没有提性能,这是故意的。似乎程序员都是急性子,或许是被windows冗长的开机时间折磨够了,有可能是因为提升性能的效果是最显而易见的……总之,我发现,绝大部分程序员对性能的关注和热情是无与伦比的!C#刚刚推出的时候,就有人摇头晃脑的说,“嗯,自动垃圾回收,性能不行吧?”DataSet横空出世,马上有很多人写代码,在DataSet里插入转载 2015-09-25 08:55:47 · 615 阅读 · 0 评论 -
架构之路(一):目标
标准来源于目标评价架构好坏是一个很主观的东西。既然大家写出来的程序都能跑,凭什么就说你架构好,我的架构差?拿出来大家评评理,张三说好,李四说不行,王五说将就……究竟谁说了算?现在已经不是一个迷信权威的时代了,所以不管你多少光环加持,你都得说出子丑寅卯来,都得服众才行。我觉得,这种现象的产生,抛开“同行相轻”和“流派之争”之类无厘头的东西,一个很重要的原因就是没有明确判断标准。所以在转载 2015-09-25 08:54:13 · 742 阅读 · 0 评论 -
一次「Too many open files」故障
昨天,项目的 ElasticSearch 服务挂了,我说的挂可不是进程没了,因为有 Supervisor 保护,而是服务不可用了。以前曾经出现过一次因为 ES_HEAP_SIZE 设置不当导致的服务不可用故障,于是我惯性的判断应该还是 ES_HEAP_SIZE 的问题,不过登录服务器后发现日志里显示大量的「Too many open files」错误信息。那么 ElasticSea转载 2015-08-07 14:19:43 · 3674 阅读 · 0 评论 -
inotify-tools时实调用rsync同步文件
下载inotify-toolshttp://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gzinotify-tools时实调用rsync同步文件#!/bin/shhost1=172.16.18.116host2=172.16.18.226src=/home/jfy/tmptmp des=/home/jf原创 2015-06-08 18:05:43 · 1988 阅读 · 0 评论 -
使用 Redis 实现分布式系统轻量级协调技术
在分布式系统中,各个进程(本文使用进程来描述分布式系统中的运行主体,它们可以在同一个物理节点上也可以在不同的物理节点上)相互之间通常是需要协调进行运作的,有时是不同进程所处理的数据有依赖关系,必须按照一定的次序进行处理,有时是在一些特定的时间需要某个进程处理某些事务等等,人们通常会使用分布式锁、选举算法等技术来协调各个进程之间的行为。因为分布式系统本身的复杂特性,以及对于容错性的要求,这些技术通常转载 2015-06-23 14:18:08 · 1735 阅读 · 0 评论 -
用sersync工具来实现目录文件的同步
前面一篇文章我们写了用rsync+inotify-tools来实现同步目录文件。 这一篇我们讲用sersync工具来实现目录文件的同步,该工具只更新变更的文件,不需要象rsync那样对目录做比较,具体介绍我不多说了,自己搜索就行了。原创 2015-06-09 12:59:06 · 2696 阅读 · 0 评论 -
Cobar的使用与心得(持续更新)
关于淘宝Cobar中间件使用中一些问题总结,会在使用中不断完善该文档1、LOAD DATA LOCAL FILE ...不支持 mysql> load data local infile "/usr/jfy/tmp/scpcdr.txt" into table scpcdr fields TERMINATED by '|'; ERROR 1148 (42000): The原创 2013-11-05 20:05:53 · 4629 阅读 · 2 评论 -
《大型网站技术架构 -核心原理与安全分析》读书笔记
大型网站架构演化的价值观网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候去追求网站的架构是舍本逐末,得不偿失的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。网站架构设计误区一味追求大公司的解决方案大公司的经验和成功模式固然重要,值得学习借鉴,但如果因此而变得盲从,就失去了坚持自我的勇气,在架构演化的道路上迟早会迷路。为了技术而技术网站技术是为业务而存在的,除此毫无意义。在技术选型和架构设计原创 2014-06-15 11:52:11 · 1834 阅读 · 0 评论 -
Gearman分布式任务处理系统(三)libevent介绍
为确保具备对海量任务调度的支持能力,Gearman毫无悬念的选择libevent作为网络操作支撑库。libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据原创 2013-11-14 23:13:34 · 3852 阅读 · 0 评论 -
超越MySQL:三个流行MySQL分支的对比
MySQL是历史上最受欢迎的免费开源程序之一。它是成千上万个网站的数据库骨干,并且可以将它(和Linux)作为过去10年里Internet呈指数级增长的一个有力证明。那么,如果MySQL真的这么重要,为什么还会出现越来越多的核心MySQ产品的高端衍生产品?这是因为MySQL是免费的开源应用程序,所以开发人员总是可以获得其代码,并按照自己的想法修改代码,然后再自行分发代码。在很长的一段时间里,在转载 2013-11-07 22:01:54 · 1007 阅读 · 0 评论