专栏首页熊二哥《大型分布式网站架构》学习笔记--01SOA

《大型分布式网站架构》学习笔记--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 条评论
登录 后参与评论

相关文章

  • 快速入门系列--MVC--02路由

        现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯。通过ASP.NET的路由系统,可以完成请求URL与物理文件的分...

    用户1216676
  • 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式。记得从自己最开始做MFC时,就使用过Nam...

    用户1216676
  • 快速入门系列--WCF--08扩展与新特性

    最后一章将进行WCF扩展和新特性的学习,这部分内容有一定深度,有一个基本的了解即可,当需要自定义一个完整的SOA框架时,可以再进行细致的学习和实践。 ? 服务...

    用户1216676
  • 巧用Openlayers4的Style

    非常细化Openlayers4中的StyleFunction,因为它可以让我非常方便的实现各种效果,本文带你一起一探究竟。

    lzugis
  • 数据结构算法操作试题(C++/Python)——有效的括号

    leetcode 链接:https://leetcode-cn.com/problems/valid-parentheses/submissions/

    莫斯
  • java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源

    /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1、通过path设定传送方式 * 2、创建客户端 *...

    用户3030674
  • C++替代关键词(and,or,not)

    Qt君
  • “小程序”:成就新零售的“大世界”

    2017年1月9日小程序正式发布,五个月时间,动作频繁!大部分企业甚至包括很多业内人士,对小程序的认识也只是一个模糊概念,小程序将给企业带来什么? 如果说一...

    静一
  • rpc框架之 thrift 学习 2 - 基本概念

    thrift的基本构架: ? 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上...

    菩提树下的杨过
  • 实时音视频开发学习15 - 计费问题

    腾讯云计费方式分为基础计费、增值服务计费和免费试用。其中基础计费包括语音通话额直播、视频通话和直播,增值服务主要为云端录制,采用旁路直播推流的方式使用云直播的能...

    金林学音视频

扫码关注云+社区

领取腾讯云代金券