"学无长幼,达者为先",作者陈康贤通过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即可以很好的解决安全问题,也可以提供通过服务名称的路由和负载均衡服务。

参考资料

  1. 陈康贤. 大型分布式网站架构[M]. 北京:电子工业出版社, 2014.

《大型分布式网站架构》学习笔记--01SOA的更多相关文章

  1. 分布式网站架构后续:zookeeper技术浅析

    Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用 越来越多.今天我想谈谈zookeeper,本文不谈如何使用z ...

  2. <转>大型分布式网站术语浅析

    夜半睡起看书,看到一篇关于分布式网站性能优化术语的文章,个人觉得不错,分享出来... 原文地址:大型分布式网站术语分析 一.I/O优化 1.增加缓存,减少磁盘的访问次数. 2.优化磁盘的管理系统,设计 ...

  3. .net 大型分布式电子商务架构说明

    .net大型分布式电子商务架构说明 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便 ...

  4. net大型分布式电子商务架构

    net大型分布式电子商务架构 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维 ...

  5. 优酷、YouTube、Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷.YouTube.Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站.门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地 ...

  6. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  7. 大型视频网站YouTube架构学习笔记

    http://www.kaiyuanba.cn/html/1/131/147/7540.htm这几天一直在关注和学习一些大型网站的架构,希望有一天自己也能设计一个高并发.高容错的系统并能应用在实践上. ...

  8. .net大型分布式电子商务架构说明(转载来自<头条>)

    背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 架构演变 基础框架剥 ...

  9. Spring Cloud 微服务架构学习笔记与示例

    本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...

随机推荐

  1. B - SETI POJ - 2065 (高斯消元)

    题目链接:https://vjudge.net/contest/276374#problem/B 题目大意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'* ...

  2. F - New Distinct Substrings (后缀数组)

    题目链接:https://cn.vjudge.net/contest/283743#problem/F 题目大意:给你一个字符串,然后让你求出不同的子串的个数. 具体思路:首先,一个字符串中总的子串个 ...

  3. Activity Window View WindowManager关系&Touch事件分发机制

    http://www.cnblogs.com/linjzong/p/4191891.html https://www.cnblogs.com/kest/p/5141817.html https://b ...

  4. nginx 配置文件[转]

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...

  5. 基于Python的机器学习实战:KNN

    1.KNN原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应 ...

  6. Cython的简单使用

    Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这样使Py ...

  7. 【实践】Yalmip使用Knitro的一些总结

    Yalmip使用Knitro的一些总结 1.软件 Knitro 11.0.1 Win64(包含安装包和确定机器ID的软件):链接:https://pan.baidu.com/s/14IfxlAdo3m ...

  8. certificate expired

    最近在测试802.1x,测试过程中,radius服务器端一直显示如下错误: (5)   authenticate {(5) eap: Expiring EAP session with state 0 ...

  9. android margin--负的margin的使用

    通常情况下,如果我们想要两个控件实现重叠的效果,一般都是使用FrameLayout 或者RelativeLayout布局.其实,如果设置两个控件的margin值为负数,也能实显控件重叠的效果. 先展示 ...

  10. 03-MySql安装和基本管理

    本节掌握内容: MySQL的介绍安装.启动 windows上制作服务 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 O ...