《大型分布式网站架构》学习笔记--01SOA
"学无长幼,达者为先",作者陈康贤通过3年左右时间就能写出如此著作确实令人钦佩,加油,熊二,早日成为一个合格的后端程序员。
基础概念
SOA(Service-Oriented Architecture):由于互联网场景下,应用越来越复杂,系统经历了三个阶段的变化单一应用架构->垂直应用架构->分布式应用架构
单一应用架构到垂直应用架构:通过业务划分,将流量分散到不同的子系统,但子系统见可能存在重叠业务,需要重复造轮子,且容易形成信息孤岛。
垂直应用架构到分布式应用架构:通过基于HTTP协议的RPC风格服务可以很好的解决应用间通信的问题。
服务风格:RPC(Remote Process Call)远程过程调用,通过方法名区分服务;Restful风格,通过GET,POST等Http请求方法区分服务。
协议基础:主要是TCP协议和Http协议,前者特点是由于处于网络协议的第四层,因此报文较小,网络开销小,性能高,但实现的代价高,不利于跨平台;而后者基于网络协议的第7层,可以支持JSON&XML格式数据传输,利于跨平台(不同终端)。
序列化形式:常见的包括Java内置序列化、(google)Protocal Buffers,Hessian, XML, Json等。此外,网上Json序列化性能比较非常多,最简明的请见FastJson、Gson和Jackson性能比较,结论推荐Jackson。
服务路由和负载均衡:在SOA架构中,服务消费者需要通过服务名称,第一步需要通过路由在众多服务中获取到可供调用的服务列表,第二步通过负载均衡算法在所选服务的集群地址列表中选择一台服务器用于服务调用。接下来通过一张dubbo的架构图来加深理解。

Tip:
传统的负载均衡还包括基于硬件的F5,基于软件的LVS和Nginx。
负载均衡算法:包括[加权]轮询(Round Robin)法、[加权]随机(Random)法、源地址Hash法、最小连接数(Least Connections)法等,还可以动态的设置规则,比如动态解析存放在ZooKeeper中的规则文件。需要注意的是,轮询由于涉及到使用锁,因此效率上有一些问题,接下来通过一段随机轮询法的代码加深理解。
public static void main(String[] args) throws Exception {
List<ServerInfo> list = Lists.newArrayList();
list.add(new ServerInfo("127.0.0.1", 1));
list.add(new ServerInfo("127.0.0.2", 2));
list.add(new ServerInfo("127.0.0.3", 3));
List<String> finalServerList = Lists.newArrayList();
for (ServerInfo item : list) {
for (int i = 0; i < item.getWeight(); i++)
finalServerList.add(item.getIp());
}
//int total = list.stream().mapToInt(i -> i.getWeight()).sum();
// AtomicInteger curCount = new AtomicInteger(0);
while (true) {
Random rand = new Random();
int opt = rand.nextInt(finalServerList.size());
System.out.println(finalServerList.get(opt));
}
}
ZooKeeper相关知识请见ZooKeeper入门学习,接下来请见一个模拟的Zookeeper树。此外,针对不同地域地域可以再添加一个层次,或者在节点数据中表明地域。

Http服务网关:之前提到通过SOA体系,各类类型的终端、第三方的ISV应用都可以发送服务请求,由于http协议所包含的信息基本都是未经加密的明文(请求参数、返回值、cookie、head等),外界可以很容易的进行监听并伪造变造请求,因此系统需要一个公共的网关统一处理这类问题。该gateway即可以很好的解决安全问题,也可以提供通过服务名称的路由和负载均衡服务。
参考资料
- 陈康贤. 大型分布式网站架构[M]. 北京:电子工业出版社, 2014.
《大型分布式网站架构》学习笔记--01SOA的更多相关文章
- 分布式网站架构后续:zookeeper技术浅析
Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用 越来越多.今天我想谈谈zookeeper,本文不谈如何使用z ...
- <转>大型分布式网站术语浅析
夜半睡起看书,看到一篇关于分布式网站性能优化术语的文章,个人觉得不错,分享出来... 原文地址:大型分布式网站术语分析 一.I/O优化 1.增加缓存,减少磁盘的访问次数. 2.优化磁盘的管理系统,设计 ...
- .net 大型分布式电子商务架构说明
.net大型分布式电子商务架构说明 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便 ...
- net大型分布式电子商务架构
net大型分布式电子商务架构 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维 ...
- 优酷、YouTube、Twitter及JustinTV视频网站架构设计笔记
本文是整理的关于优酷.YouTube.Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站.门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地 ...
- aws基础架构学习笔记
文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...
- 大型视频网站YouTube架构学习笔记
http://www.kaiyuanba.cn/html/1/131/147/7540.htm这几天一直在关注和学习一些大型网站的架构,希望有一天自己也能设计一个高并发.高容错的系统并能应用在实践上. ...
- .net大型分布式电子商务架构说明(转载来自<头条>)
背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 架构演变 基础框架剥 ...
- Spring Cloud 微服务架构学习笔记与示例
本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...
随机推荐
- tomcat顺序图摘要
1.Connector 处理一次请求顺序图 2.Context 和 wrapper 的处理请求时序图 3. 参考: https://www.ibm.com/developerworks/cn/java ...
- Python 成仙之路
这个部分的所有内容,都是我学习Python过程中的学习笔记. 这个部分的所有内容,都是我学习Python过程中的学习笔记. 这个部分的所有内容,都是我学习Python过程中的学习笔记. 第一部分 p ...
- 董事局主席董事长总裁首席执行官CEO总裁董事监事区别
董事长是公司的最大股东:董事长是董事会的主席,一般是企业的所有者,掌握企业的股权并且决定企业的发展策略. 董事局主席通常是在大财团中才会出现,董事局主席管数个董事长,一个大财团涉及很多方面的业务,因此 ...
- mysql系列七、mysql索引优化、搜索引擎选择
一.建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天 ...
- win10安装virtualBox创建CentOS6.5虚拟机
1.安装virtualBox 1.1.下载安装包,安装 搜索一下,或者去 VirtualBox官网下载一个. 下载第一个,兼容64,32位. 2.创建64位虚拟机 2.1.解决无法创建64位的问题 2 ...
- 电信运营商 IT 系统介绍
业务支撑系统 BSS: Business support system 运营支撑系统 OSS: Operation support system 管理支撑系统 MSS: Management Su ...
- Ex 5_33 实现一个关于公式长度(其中所有文字总的出现次数)为线性时间的Horn公式可满足性问题_第十次作业
对于所有的蕴含式,生成一张有向图,对于每一个蕴含式,将左边的每一个文字连接到一个中间结点,并用中间结点记录蕴含式左边文字的数量,然后将中间结点连接到蕴含式的右侧结点.例如,对于蕴含式集合 生成的有向图 ...
- ThinkPHP使用不当可能造成敏感信息泄露
ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志,如果debug模式不关,可直接输入路径造成目录遍历. ThinkPHP3.2结构:Application\Runtime\Lo ...
- Java连接oracle数据库的两种常用方法
1. 使用thin连接 由于thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无关的,你无需安装Oracle客户端,只 ...
- vue系列之获取多选框中被选中的值
多个勾选框,绑定到同一个数组: <input type="checkbox" id="jack" value="Jack" v-mod ...