ELB
定义:
Elastic load balancer是AWS提供一种自伸缩高可用的均衡负载器. 基本上ELB做了2件事情:
- 可以将网络请求按照一定算法分发给特定EC2 instance集群。
- 对于集群中的instance进行health check,在转发请求的仅会把请求分发给健康的instance从而保证高可用性。
分类:
按照ELB的服务对象可以分为:
- internet-facing (public) ELB
- 主要用于VPC边界之外的用户访问的负载均衡
- 创建ELB的同时会生成一个广域网可访问的DNS名
- internal (private) ELB
- 主要用户VPC内的instance相互访问的负载均衡
- 创建ELB的同时会生成一个VPC内有效的DNS名
按照ELB的类型分可以分为:
- Classic ELB
- 7/4层均衡负载
- 仅支持轮询均衡负载算法
- 支持Classic网络和VPC网络
- 不支持Webstocket长链接
- Application ELB
- 7层均衡负载
- 支持轮君负载算法,端口转发算法,路径转发算法
- 仅支持VPC网络
- 支持Websocket长链接
- 支持target group。将ELB和特征集群解耦
- 强制cross-zone balance, 所以对于Application ELB你必须给他最少2个处于不同AZ的subnet,并且每个AZ只能同时设置一个subnet
概念:
- Listener
ELB通过Listener (协议+端口号)来监听接受到的请求。当客户端发送一个请求到ELB (i.g http:80) ELB如果设定了相应的Listener则会处理这个请求(否则不做响应),Listener会维护2个连接, client-to-ELB and ELB-to-server。注意这两个连接之间不是以流的形式来传输数据的,当client在发送请求的时候,只有当ELB接收完成了所有来自client端的数据才会将数据转发给server端,而不是像流一样接收一点传一点 - Idle Connection timeout
根据上面说的Listener维护了2个连接,Idle Connection timeout 就是控制这2两个连接的空闲超时时间的。当任何一个连接在指定时间内没有接受数据,则Listener释放连接。举个例子,当client通过ELB向server发送一个文件上传的请求的时候,首先会在client-to-ELB这个连接上传输数据,如果数据比较大传输的时间比较长,则可能会导致ELB-to-server这个连接一直空闲,一旦空闲时间达到了Idle Connection timeout,ELB就会释放ELB-to-server的连接,从而导致server端会丢失这次client端的请求。 - Connection draining
你可以动态的从ELB的目标集群去动态的增加或移除instance, 增加还好说但移除会稍微有些复杂。当你从ELB de-register一个instance的时候,毫无疑问,ELB将不会在把新接受到的请求转发给这台instance去处理,但是已经接受到的请求呢?一个完整的请求都包含一个request和一个response,当你de-register一个instance的时候,如果一个请求已经接受但还没来的及返回response,如果你暴力的直接close掉ELB-to-server的connection,则这个请求虽然被处理了但client端无法接受到response。所以Connection draining就是用来解决这一问题的,它允许你去设置一个时间,在这个时间内,即使你de-register了instance但是还保持连接存在,知道超过这个时间才close connection. - Sticky session
ELB使用最基本的轮询均衡负载算法,这块会有一个问题。一个客户的2个请求会被分配到不同的机器上,这会导致session丢失。例如:你的登陆请求被ELB分配给了机器A, 机器A在session中保存了你的登陆信息,但是你请求其他页面的请求被ELB分配给了机器B而机器B的session中没有你的登陆信息,则会跳转登陆页面让你再次登陆。Sticky session可以保证相同客户的请求始终被分配到一台固定的server直到session过期或者cookie被清空。 - Cross zone balance
当你的ELB对应多个处于不同AZ的subnet的时候,请求会被随机的分配到不同的AZ的instance去处理
CloudWatch
定义
CloudWatch是用于对各种AWS资源进行监控的一个服务。CloudWatch由下面几个组件组成
Metric
Metric是对于AWS资源被监控的一个维度(如EC2 instance的CPU使用率, ELB单位时间接收request的数量).
- Metric是资源级别的(具体到一个EC2 instance, 一个ASG,一个ELB)-
Alarm
Alarm有 3种状态- ALARM - 告警
- OK - 正常态
- INSUFFICIENT - 采样数据不足
Alarm由3个部分组成
- 一个Metric
- 一个Rule,定义获取Metric data的间隔时间(period), 采样数量(periods)和阀值(i.e: CPU>=50%)
- 一个Action, 当alarm被触发的时候要采取的动作
- Notification
- ASG actions
- EC2 actions
Event
CloudWatch还提供事件系统,当一些服务的状态发生变化会抛出事件,然后允许你去定义相应的动作。感觉和Alarm非常相似,但总结来说有如下不同
Alarm | Event |
---|---|
资源级别的,你仅能给某个资源创建Alarm | 服务级别你可以给一类资源创建Event |
有详细的采样配置和阀值 | 针对于笼统的状态变化 |
Alarm触发的action都是AWS预定义的 | Event支持Lambda, 对于事件的处理更加灵活 |
- Log