架构解密的读书笔记

作者:吴治辉
书名:架构解密:从分布式到微服务(第2版)
治辉的架构解密的第2版,上周在去北京的路上一边读一边做了一些笔记,涉猎广泛,由浅入深,循序渐进,非常推荐一读。


CHINANET:中国骨干网

○ 局域网需要上外网的时候,需要电信服务提供商(ISP)提供上网服务,将局域网对接到更大的网络——城域网。连接几个城域网的网络叫作国家骨干网,连接全球骨干网的网络叫作国际骨干网。中国大陆地区的海底光缆连接点有三个:青岛、上海和汕头,总共有6条光缆通向全球。

○ 中国的全国性骨干网是CHINANET,它是前邮电部经营管理的网络,1995年年初与国际互联网连通并向社会提供服务。CHINANET也是分层网络,由骨干网和汇接层层两部分组成:骨干网是其主要信息通路,由直辖市和各省会城市的网络节点构成;汇接层则用来连接各省(区)的城域网。

○ CHINANET由8个核心节点组成,这8个核心节点分别是北京、上海、广州、沈阳、南京、武汉、成都、西安。北上广”3个节点成为超级节点,也是CHINANET的3个国际出口,在这3个超级节点之间形成大三角电路,其他5个普通节点则与每个超级节点互联。

○ CHINANET的“汇接层”网络:这一层由54个汇接节点组成,除甘肃、山西、新疆、宁夏、贵州、青海、西藏、内蒙古等8个省份的单汇接节点外,每个省都有两个骨干网汇接节点,在第一和第二出入口节点之间通过一条省内中继连接。各各省份双方向上连接,分别连接到一个超级核心节点和一个普通核心节点

IDC机房

○IDC机房又被称为互联网数据中心(Internet Data Center)或者数据中心,IDC机房是标准化的电信专业级机房,为企业、政府提供服务器托管、租用及相关增值等方面的全方位服务。一开始,IDC机房主要是电信、联通等运营商建设的,后来很多企业也有了自己的IDC机房,BAT都自建了IDC机房。

○由于2002年5月国于2002年5月国内电信业大重组,原中国电信北方10个省份正式划入中国网通集团,南方21个省份重组为新的中国电信。这将把中国的互联网一分为二,导致互联互不通,使国内的IDC机房往往具备双线接入这一奇特特性。

○ 在IDC机房里通常采用传统的VLAN技术实现租户网络的隔离,VLAN基于IEEE的802.1Q协议,在该协议的帧格式里面定义了VLAN ID的位数为12比特,因此最多只能支持4094个VLAN。

HTTP

○ HTTP是全球最大规模的分布式系统网络的基础之一,也采用了传统的服务器-客户端的通信设计模式。在报文编码方式上,HTTP采用了面向程序员的文本(ASCII)编码方式而非面向计算机的二进制编编码方式。

○HTTP是无状态的请求-应答协议。在HTTP诞生之初网上没什么资源,也根本不存在可以跟用户交互的网站,因此这个设计思路也是完全可以理解的。

○ 最初的HTTP(0.9版)只提供了GET方法,这是因为其作者认为网上所有的资源(网页)都是静态的,远程用户是不能修改的,浏览器所能做的就是从远程服务器上“获取(GET)”指定网页并以只读方式展示给用户,在用户获取网页之后就立即中断与服务器的连接,从而节省宽带和服务器的宝贵资源。

○HTTP做了一个较大的升级(1.0版本):首先,增加了POST方法,使得客户端可以提交(上传)文件到服务器端;其次,通过引入Content-Type这个Header,支持除文本外的多媒体数据的传输支持。HTTP在1.0版本中引入了一个重要的设计,即在报文中增加了Header属性列表,每个Header都是一个Key/Value键值对,整个Header列表可以被视为一个Map的数据结构,用来在客户端(浏览器)与服务器端传递控制类数据。

○ 采用了HTTP作为通信协议的分布式系统天然具备了无侵入性的基础设施能力全面改进的优势。

Cookie && Session && Token

○ 即如何识别同一个用户的连续多次的请求?比如在典型的网购行为中一个客户网购的整个过程会涉及几十次甚至上百次的网页交互,这就意味着我们必须为无状态的HTTP引入某种状态机制,而具体的实现机制就是HTTP Cookie。HTTP Cookie新增了两个扩展性的HTTP Header,其中一个是Set-Cookie。Set-Cookie是服务端专用的Header,用来告知客户端(浏览器):“刚才的用户通过了身份验证,我现在设置了一个Cookie,里面记录了他的身份信息及有效期,你必须把它的内容保存下来,当该用户继续发送请求给我时,你自动在每个请求的HTTP Header上添加这个Cookie的内容后再发送过来,这样我就可以持续跟踪这个用户的后续请求了,请务必遵守要求,直到Cooker有效期结束才能删除Cookie,我不想用户反复登录及证明身份。”

○ Java开发人员最熟悉的Tomcat方式Set-Cookie,其中的jsessionid是Tomcat服务器用来标识用户的,而其他JEE Server各有各的名称,在PHP中则通常使用phpsessionid。

○Cookie是由RFC6265标准规范规定的一个概念,有对应的呈现标准和呈现方式,总体来说,我们可以将Cookie理解为HTTP的一部分,因此所有人都可以准确理解、表达并且进行标准化实现。

○ 与Cookie不同,Session属于Web应用开发中一个抽象的概念,它对应Cookie,用来在应用服务器端表示和保存用户的信息。但是,Session并没有标准化的定义及实现方式,因此在不同的Web编程语言里都有不同同的理解。Session中的数据通常被存储在应用服务器的内存中

○ Cookie的内容是被存放在磁盘中的,其他人是有可能直接访问到Cookie文件的;另外,Cookie中的信息是明文保存的,意味着攻击者可以通过猜测并伪造Cookie数据破解系统。避免这种漏洞的直接防护手段就是用数字证书对敏感数据进行加密签名,在
在加密签名后这串字符串就是我们所说的Token,这样攻击者就无法伪造Token了,因此Token在本质上是Session(SessionID)的改进版。

○与Session将用户状态保留在服务器端的常规做法不同,Token机制则把用户状态信息保存在Token字符串里,服务器端不再维护客户状态,服务器端就可以做到无状态,集群也更容易扩展。那么,Token数据是被放在哪里的呢?标准的做法是将其放在专用的HTTP Header“X-Auth-Token”中保存并传输,但客户端在拿到Token以后可以将其在本地保存,比如在App程序中,Token信息可以被保存在手机中,而Web应用中,Token也可以被保存到H5的localstorage中。

HTTP And Service Mesh

○在Service Mesh的各种实现类产品中一致选择了HTTP作为服务之间的基础通信协议,而不是其他二进制通信协议。并且,Service Mesh的核心功能或特性几乎全部依赖HTTP的特性才得以实现。

○在书特意将SideCar(边车)画成U型,这是为了方便表示Sidecar其实“包围但又不是完全包裹”它对应的Service实例的这一关键特性。即在进程角度,Sidecar是完全独立的进程(可以是一个或多个),与对应的Service实例不产生任何进程和代码级别的纠缠,非常像一个独立进程的代理。

○考虑到我们的Service其实是一个HTTP服务器进程(微服务),我们可以理解把SideCar理解为一个特殊定制的Nginx代理。另外一个细节需要注意:进入任意一个Service实例的请求都要从SideCar代理后才能抵达Service实例本身,在这个过程中,SideCar可以做任何HTTP能做的事情,比如黑白名单的检查、服务限速及服务路由等功能,这些恰恰就是Service Mesh的核心特性之一。

RPC

○古老又有生命力的RPC:RPC最初由Sun公司提出,即Sun RPC,后来也成为IETF国际标准,至今仍然重要的NFS协议就是最早的基于RPC的一个重要案例。

○谷歌于2015年开源的跨语语言的RPC框架——gRPC,gRPC采用的默认的编码机制也是谷歌设计的ProtoBuf。gRPC没有基于传统的自定义TCP Socket传输通道,而是基于现有的HTTP 2.0。

○用Go开发的的分布式系统,比较著名的如Kuberntes、Istio等,都是以gRPC作为分布式通信的接口协议的。

微服务架构

○最早提出微服务架构及实践微服务架构的公司有Google、Amazon、eBay和NetFlix等。在这种新的微服务架构下,整个系统被分解为独立的几个微服务,每个微服务都可以独立部署在多台机器上,前端应用可以通过负载均衡器(Load Balancer)来访问微服务,微服务之间也可以通过同样的接口进行远程通信。

○一般而言,如果一个分布式系统具备如下特点,则我们可以称之为“微服务架构”

  • 任何一个服务都由多个独立的进程提供服务,这些进程可以分布在多台物理机上,任何进程宕机,都不会影响系统提供服务。
  • 整个系统是由多个微服务有机组成的一个分布式系统,换而言之,不是一个巨大的单体架构。

○ 第1类:基于传统的高性能RPC技术和服务治理的微服务架构,这个领域的王者为ZeroC IceGrid。

○第2类:以HTTP REST为通信机制的通用性微服务架构,典型的为Spring Cloud。

○第3类࿱

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值