如何设计网络服务

设计需要考虑的因素:

  • Availability: 平均无故障时间

  • Performance:响应时间

  • Reliability: 数据可靠

  • Scalability:可扩展

  • Manageability:可维护

  • Cost:尽量降低费用

如何设计

Services

将不同功能解耦到不同的service中。

如何设计网络服务_第1张图片
Paste_Image.png

Redundancy

同一服务要有多个实例,一来可以解决单点失败问题,二是可以平衡负载。

数据存储也要有Copy来防止数据丢失。

如何设计网络服务_第2张图片
Paste_Image.png

Partitions

数据量太多,则需要进行分片,或者分担负载。

如何设计网络服务_第3张图片
Paste_Image.png

访问数据如何Scale

如何设计网络服务_第4张图片
Paste_Image.png

随着访问量增大,app server要尽量使用shared-nothing architecture来进行minimized,访问压力都会落到database server。

如何保证database server的scalability和快速访问呢

Caches

如何设计网络服务_第5张图片
Paste_Image.png

Cache有两种方式:

  • Global Cache:

Cache是独立的一个服务器

如何设计网络服务_第6张图片
Paste_Image.png
  • Distributed Cache:

每一个Request Node有自己的Cache,同一请求通过hash分配到不同Request Node上

如何设计网络服务_第7张图片
Paste_Image.png

Proxies:

在Database server前架设一个代理

通过代理可以将同一内容的请求包装到对database的一次请求里

如何设计网络服务_第8张图片
Paste_Image.png

也可以将数据相近的请求包装到同一请求里(局部性原理)。

如何设计网络服务_第9张图片
Paste_Image.png

Indexes

Index 可以加速数据查询,可以采取多级Index,可以减少index占用的空间

如何设计网络服务_第10张图片
Paste_Image.png

Load Balancers

Queues

使用Queue可以解决client写数据等待时间过长的问题

如何设计网络服务_第11张图片
Paste_Image.png

Refer:

http://www.aosabook.org/en/distsys.html

你可能感兴趣的:(如何设计网络服务)