架构知识学习笔记(更新ing)
一、中间件:RPC——远程过程调用主要解决远程通信间的问题,不需要了解底层网络的通信机制。RPC框架负责屏蔽底层的传输方式(TCP或UDP)、序列化方式以及通信细节。从而在实际开发中,不需要关心底层通信细节和调用过程,让业务端专注于业务代码的实现。比较熟知的有阿里的HSF和DUBBO(开源)。通过RPC,可以让较大的应用系统拆分部署,实现分布式远程调用。RPC框架三个核心角色:(1)服...
一、中间件:RPC——远程过程调用
主要解决远程通信间的问题,不需要了解底层网络的通信机制。RPC框架负责屏蔽底层的传输方式(TCP或UDP)、序列化方式以及通信细节。从而在实际开发中,不需要关心底层通信细节和调用过程,让业务端专注于业务代码的实现。比较熟知的有阿里的HSF和DUBBO(开源)。
通过RPC,可以让较大的应用系统拆分部署,实现分布式远程调用。RPC框架三个核心角色:
(1)服务提供者:对外提供后台服务,将自己的服务信息,注册到中心
(2)注册中心:用于服务端注册远程服务以及客户端发现服务。目前主要借助开源框架实现:zookeeper、eureka\consul, etcd等。
(3)服务消费者:从注册中心获取远程服务的注册信息,然后进行远程过程调用。
调用过程:
1)服务调用方(client)调用以本地调用方式调用服务;
2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;在Java里就是序列化的过程
3)client stub找到服务地址,并将消息通过网络发送到服务端;
4)server stub收到消息后进行解码,在Java里就是反序列化的过程;
5)server stub根据解码结果调用本地的服务;
6)本地服务执行处理逻辑;
7)本地服务将结果返回给server stub;
8)server stub将返回结果打包成消息,Java里的序列化;
9)server stub将打包后的消息通过网络并发送至消费方
10)client stub接收到消息,并进行解码, Java里的反序列化;
11)服务调用方(client)得到最终结果。
1.建立通信
首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。
2.服务寻址
1)服务注册
首先需要把服务注册到服务中心。其实就是在注册中心进行一个登记,注册中心存储了该服务的IP、端口、调用方式(协议、序列化方式)等。在zookeeper中,进行服务注册,实际上就是在zookeeper中创建了一个znode节点,该节点存储了上面所说的服务信息。
2)服务发现
服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。当消费者调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从IP列表中取一个服务提供者的服务器调用服务。
3)注册服务
可靠的寻址方式(主要是提供服务的发现)是RPC的实现基石,比如可以zookeeper来实现注册服务等等。
- 服务提供者启动后主动向服务(注册)中心注册机器ip、端口以及提供的服务列表。
- 服务消费者启动时向服务(注册)中心获取服务提供方地址列表,可实现软负载均衡和Failover。
- 提供者需要定时向注册中心发送心跳,一段时间未收到来自提供者的心跳后,认为提供者已经停止服务,从注册中心上摘取掉对应的服务等等。
3.网络传输
数据传输采用什么协议,数据该如何序列化和反序列化
4.NIO通信
当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。
5.服务调用
比如:B机器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作
二、中间件:MOM——面向消息的中间件
https://blog.csdn.net/leexide/article/details/80035462
三、Redis干嘛的
https://blog.csdn.net/lzl9421na/article/details/76651374
1) 大数据时代淘宝、微信、以及微博等都广泛的使用了redis数据库,将一些固定不变的数据例如学校,区域等固定的信息保存在关系型数据库中。然后对于经常变化的数据例如淘宝每个节日都会有比较热门的搜索显示在搜索框,当节日过去关键字自动删除,为了便于管理,可以将这些数据保存在redis数据库中,并设置过期时间,到达时间就自动删除。
2)为了缓解数据库压力,微博首先将发送的微博保存到redis数据库,自己可以立即查看到,然后将内存中的数据同步到关系型数据库。
四、应用服务器和WEB服务器
应用服务器处理业务逻辑,web服务器则主要是让客户可以通过浏览器进行访问,处理HTML文件,web服务器通常比应用服务器简单。
WEB服务器:Apache、IIS、Nginx(也是反向代理服务器)。Apache支持所有的操作系统,可以跨平台使用,而IIS只能基于windows操作系统下使用,在开源代码方面Apache是完全开放免费的,而IIS是部分开源代码。
应用服务器:Tomcat、Weblogic、Jboss
https://blog.csdn.net/jameswuang/article/details/80986789
五、Web Service(web服务架构)
SOA面向服务架构详解 https://blog.csdn.net/fuhanghang/article/details/83961606
SOAP:简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。SOAP = HTTP + RPC + XML,也就是采用http作为底层通信、rpc作为调用途径,数据采用xml进行打包格式。soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。
阿里巴巴的Dubbo是SOA的典型实现。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)