如何设计网络服务
2017-03-19 本文已影响10人
yangweigbh
设计需要考虑的因素:
-
Availability: 平均无故障时间
-
Performance:响应时间
-
Reliability: 数据可靠
-
Scalability:可扩展
-
Manageability:可维护
-
Cost:尽量降低费用
如何设计
Services
将不同功能解耦到不同的service中。
Paste_Image.pngRedundancy
同一服务要有多个实例,一来可以解决单点失败
问题,二是可以平衡负载。
数据存储也要有Copy来防止数据丢失。
Paste_Image.pngPartitions
数据量太多,则需要进行分片,或者分担负载。
Paste_Image.png访问数据如何Scale
Paste_Image.png随着访问量增大,app server要尽量使用shared-nothing architecture来进行minimized
,访问压力都会落到database server。
如何保证database server的scalability和快速访问呢
Caches
Paste_Image.pngCache有两种方式:
- Global Cache:
Cache是独立的一个服务器
Paste_Image.png- Distributed Cache:
每一个Request Node有自己的Cache,同一请求通过hash分配到不同Request Node上
Paste_Image.pngProxies:
在Database server前架设一个代理
通过代理可以将同一内容的请求包装到对database的一次请求里
Paste_Image.png也可以将数据相近的请求包装到同一请求里(局部性原理)。
Paste_Image.pngIndexes
Index 可以加速数据查询,可以采取多级Index,可以减少index占用的空间
Paste_Image.pngLoad Balancers
Queues
使用Queue可以解决client写数据等待时间过长的问题
Paste_Image.png