Month: 5月 2017

TCP接入层的负载均衡、高可用、扩展性架构

一、web-server的负载均衡

互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡。整个架构分三层:

  • 上游调用层,一般是browser或者APP
  • 中间反向代理层nginx
  • 下游真实接入集群,web-server,常见web-server的有tomcat,apache

 

整个访问过程为:

  • browser向daojia.com发起请求
  • DNS服务器将daojia.com解析为外网IP(1.2.3.4)
  • browser通过外网IP(1.2.3.4)访问nginx
  • nginx实施负载均衡策略,常见策略有轮询,随机,IP-hash等
  • nginx将请求转发给内网IP(192.168.0.1)的web-server

 

由于http短连接,以及web应用无状态的特性,理论上任何一个http请求落在任意一台web-server都应该得到正常处理(如果必须落在一台,说明架构不合理,不能水平扩展)。

 

问题来了,tcp是有状态的连接,客户端和服务端一旦建立连接,一个client发起的请求必须落在同一台tcp-server上,此时如何做负载均衡,如何保证水平扩展呢?

 

二、单机法tcp-server

单个tcp-server显然是可以保证请求一致性:

  • client向tcp.daojia.com发起tcp请求
  • DNS服务器将tcp.daojia.com解析为外网IP(1.2.3.4)
  • client通过外网IP(1.2.3.4)向tcp-server发起请求

 

方案的缺点?

无法保证高可用。

 

三、集群法tcp-server

通过搭建tcp-server集群来保证高可用,客户端来实现负载均衡

  • client内配置有tcp1/tcp2/tcp3.daojia.com三个tcp-server的外网IP
            

每个程序员应该阅读的10本经典书籍

如果你是一个程序员,除了编码之外,你还需要大量的阅读。今天我要为大家介绍几本值得一读的书,包括《The Pragmatic Programmer》,《The Mythical Man-month: Essays on Software Engineering》和《Clean Code: A Handbook of Agile Software Craftsmanship》。

书籍是知识和智慧的重要来源。但不幸的是,现在很多人已经不愿意看书了。程序员更是罕见地会去读书,最常见的依靠互联网搜索结果来找寻答案。…

PHP控制缓存输出之ob系列函数详解

本文来自“PHPGod联盟”北京小伙伴的原创文章,欢迎分享收藏~  

ob,输出缓冲区,是output buffering的简称,而不是output cache。ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担

ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器。…