《大型分布式网站架构》学习笔记--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即可以很好的解决安全问题,也可以提供通过服务名称的路由和负载均衡服务。

参考资料

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

《我的WCF之旅》博文系列汇总

WCF是构建和运行互联系统的一系列技术的总称,它是建立在Web Service架构上的一个全新的通信平台。你可以把它看成是.NET平台上的新一代的Web Ser...

621
来自专栏FreeBuf

Umap2 | 开源USB host安全评估工具

Umap2是一款由NCC Group和Cisco SAS小组开发的、基于python的USB host安全评估工具。 它拥有第一版所支持的所有功能: umap2...

2135
来自专栏大内老A

《我的WCF之旅》博文系列汇总

WCF是构建和运行互联系统的一系列技术的总称,它是建立在Web Service架构上的一个全新的通信平台。你可以把它看成是.NET平台上的新一代的Web Ser...

1888
来自专栏华仔的技术笔记

iOS应用架构谈 本地持久化方案及动态部署

嗯,你们要的大招。跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给我提issue或者...

4107
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

INSTALL FAILED CONFLICTING PROVIDER问题完美解决方案

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) ? 在安装Android应用时出现INSTALL F...

3687
来自专栏竹清助手

深入理解什么是RESTful API ?

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。   这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hig...

1052
来自专栏Flutter入门到实战

深入理解什么是RESTful API ?

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。   这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hi...

1.9K2
来自专栏编程

三种主流Web架构

往期精选 做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小...

7097
来自专栏数据星河

几种实用型Ruby Web开发框架介绍

  大家在通过对Ruby的学习后,都知道,Ruby on Rails是一款性能非常优越的Ruby Web开发框架。但是其他的Ruby Web开发框架又有多少人知...

1480
来自专栏AI2ML人工智能to机器学习

Shiny: R语言来建立开源交互式数据分析微服务的神器

先来说个应用场景: 假设你需要快速Prototype一个数据分析的服务, 而且需要给业务客户一定的自由度来理解数据分析的强大, 例如更换数据, 更换分析手段。 ...

2243

扫码关注云+社区

领取腾讯云代金券