负载均衡
基本概念:Load balancing,即负载均衡,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源、最大化吞吐率、最小化响应时间、同时避免过载的目的
思想来源(为什么需要负载均衡):
样例:我们在日常生活中常常不可避免需要去一些人多比较拥挤的地方,比如地铁站、火车站、电影院、银行等。无论是买票,还是排队入场,这些场所一般都会设置多个服务点或者入口。如果没有人加以引导的话,大多数情况下会发生:最近的入口处会挤满人而那些偏远的服务点或者入口就不太有人
显然这种情况下,会导致资源的浪费,因为如果可以把这些排队的人很好的分散到各个入口的话会大大缩短排队的时间。同理,网站的建设也是一样的。为了提升网站的服务能力,很多网站采用集群部署,就像话剧院有多个入口一样。这时候,就需要一个协调者,来均衡的分配这些用户的请求,可以让用户的可以均匀的分派到不同的服务器上。
实际应用:为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
所谓负载均衡,也就是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
服务调用
RPC(Remote Procedure Call)
远程方法调用,简单的理解就是一个节点请求另一个节点提供的服务
RPC执行过程:
- 首先客户端需要告诉服务器,需要调用的函数,这里函数和进程ID存在一个映射,客户端远程调用时,需要查一下函数,找到对应的ID,然后执行函数的代码。
- 客户端需要把本地参数传给远程函数,本地调用的过程中,直接压栈即可,但是在远程调用过程中不再同一个内存里,无法直接传递函数的参数,因此需要客户端把参数转换成字节流,传给服务端,然后服务端将字节流转换成自身能读取的格式,是一个序列化和反序列化的过程。
- 数据准备好了之后,网络传输层需要把调用的ID和序列化后的参数传给服务端,然后把计算好的结果序列化传给客户端,因此TCP层即可完成上述过程,gR