文章目录- 超市收银
- HSF的设计思想
超市收银
一家小超市,一个收银员,同时还兼着干点其他的事情,例如,打扫卫生、摆货。来买东西的人多起来了,排队很长,顾客受不了,于是增加了一个收银台,雇了一个收银员。忙的时候收银员根本没时间去打扫卫生,超市内有点脏,于是雇了一个专门打扫卫生的。随着顾客不断增加,超市也经过好几次装修,由以前的一层变成了两层,这个时候所做的事情就是不断增加收银台、收银员和打扫卫生的人。在超市运转的过程中,老板发现一个现象,有些收银台排很长的队,有些收银台排的人不多,了解后知道是因为收银台太多了,顾客根本看不到现在各个收银台的状况。对于这个现象,一 种简单的方法就是继续加收银台。但一方面,超市没地方可加收银台了,另一方面,作为老板,当然不需要雇太多的人,于是开始研究怎样让顾客了解到收银台的状况,简单地加了一个摄像头和一个大屏幕,在大屏幕上显示目前收银台的状况,这样基本解决了这个问题。排队长度差不多后,又出现了一个现象,就是有些收银台速 度明显比其他的慢,原因是排在这些收银台的顾客买的东西特别 多,于是又想了一招,就是设立专门的10件以下的通道,这样买 东西比较少的顾客就不用排太长的队了,这一招施展后,顾客的满意度明显提升,销售额也好了不少,后来就继续用这招应对团购状况、VIP 状况。在解决了上面的一些烦心事后,老板关注到了一个存在已久的现象,就是白天收银台很闲,晚上则很忙,于是从节省成本上考虑,决定实行部分员工只在晚上上班的机制,白天则关闭一些收银台,顾客仍然可以通过大屏幕看到哪些收银台是关闭的,避免走到没人的收银台去,实行这招后,成本大大降 低了。 这个生活中的例子及其解决的方法,其实和互联网网站发展过程中的一些技术是非常类似的,只是在技术层面用其他名词来 表达了而已,例如,有集群、分工、负载均衡、根据QoS分配资 源等。
集群:所有的收银员提供的都是收银功能,无论顾客到哪 一个收银员面前,都可完成付款,可以认为所有的收银员就构成了一个集群,都希望能做到顾客增加的时候只需增 加收银员就行。在现实生活中有场地的限制,而在互联网应用中,能否集群化还受限于应用在水平伸缩上的支撑程 度,而集群的规模通常会受限于调度、数据库、机房等。 分工:收银员和打扫卫生的人分开,这种分工容易解决, 而这种分工在互联网中是一项重要而复杂的技术,没有现实生活中这么简单,涉及的主要有按功能和数据库的不同 拆分系统等,如何拆分以及拆分后如何交互是需要面临的两个挑战。因此,会有高性能通信框架、SOA平台、消息 中间件、分布式数据层等基础产品的诞生。 负载均衡:让每个收银台排队差不多长,设立小件通道、 团购通道、VIP通道等,这些可以认为都是集群带来的负载均衡的问题,从技术层面上说,实现起来自然比生活中复 杂很多。 根据QoS分配资源:部分员工仅在晚上上班的机制要在现实 生活中做到不难,而对互联网应用而言,就是一件复杂而 且极具挑战的事。
参照生活中的例子来说,在面对用户增长的情况下,想出这些招应该不难,不过要掌握以上四点涉及的技术就相当复杂了,而且互联网中涉及的其他很多技术还没在这个例子中展现出来, 例如缓存、CDN等优化手段;运转状况监测、功能降级、资源劣化、流控等可用性手段,自建机房、硬件组装等成本控制手段。因此,构建一个互联网网站确实是不容易的,技术含量十足,当然,经营一家超市也不简单。从超市的运维可以抽象出系统设计的一些思路,服务拆分之后,如何取得我需要的服务?在“电视机”上,把每个集群能提供的服务显示出来。你不需要关心哪个人为你服务,当你有需要的时候,请先看头顶的电视机,它告诉你哪个服务在哪个区域。当你直接去这个区域的时候,系统会给你找到一个最快速的服务通道。
HSF的设计思想
这就是HSF的设计思想,服务的提供者启动时通过HSF框架向ConfigServer(类似超市的电视机)注册服务信息(接口、版本、超时时间、序列化方式等),这样ConfigServer上面就定义 了所有可供调用的服务(同一个服务也可能有不同的版本);服 务调用者启动的时候向ConfigServer注册对哪些服务感兴趣(接口、版本),当服务提供者的信息变化时,ConfigServer向相应的感兴趣的服务调用者推送新的服务信息列表;调用者在调用时则根据服务信息的列表直接访问相应的服务提供者,而无须经过ConfigServer。我们注意到ConfigServer并不会把服务提供者的IP地址推送给服务的调用者,HSF框架会根据负载状况来选择具体的服务器,返回结果给调用者,这不仅统一了服务调用的方式,也实现了“软负载均衡”。平时ConfigServer通过和服务提供者的心跳来感应服务提供者的存活状态。