来源:https://zhuanlan.zhihu.com/p/28817489
高性能的网络和硬件
CDN加速技术。CDN加速将网站的内容缓存在网络边缘(离用户接入网络最近的地方),然后在用户访问网站内容的时候,通过调度系统将用户的请求路由或者引导到离用户接入网络最近或者访问效果最佳的缓存服务器上,由该缓存服务器为用户提供内容服务;相对于直接访问源站,这种方式缩短了用户和内容之间的网络距离,从而达到加速的效果。
后台服务高性能设计
要素1:分布式缓存
分布式缓存系统可以Set化部署,比如商品数据缓存到Set1,用户数据缓存到Set2,或者一类用户的数据缓存到Set1,另一类的用户缓存到Set2
此外,也可以按集群化部署,每一个缓存服务存储的数据都是对等的,可以对外提供同等的服务,所以外部请求需要负载均衡到不同有缓存服务器
Set化部署的目的主要在于将不同类型的数据路由到不同的地方,好处就是可以
- 减少不同业务数据的耦合
- 可以针对不同业务进行不同的优化,从而提升整体性能。
集群式部署的目的在于,提高缓存系统的对外服务能力,
- 上层业务的路由策略简单灵活
- 扩缩容比较容易。
要素2:服务分层
在经典的三层(接入层、逻辑层和存储层)后台服务架构中,三层的划分的原则就是同层次的系统专注处理自己的事情。
- 接入层专注于处理前端和后台服务的接入连通、安全认证和数据转发。
- 逻辑层专注于处理不同业务的无状态逻辑服务。
- 存储层专注于处理业务数据的存储。这样分层的好处在于各个层次能够依据业务特点专注于自己的事情,提高系统复用性,降低业务间的耦合性。
要素3:操作异步化
前大型系统中普遍使用消息队列来将调用异步化,不仅可以提升系统性能还可以提升系统的扩展性。对于大量的数据库写请求,对于数据库的压力很大,同时也会造成数据库响应不及时。可以考虑使用消息队列,数据库的写请求可以直接写入到消息队列,然后通过多线程或多进程从消息队列中读取数据慢慢写入到数据库。消息队列服务器的处理速度会远远快于数据库,所以用户在写入操作时会感觉到很快的写入速度。
此外,消息队列对于请求不均衡的系统,还具有削峰填谷的作用,将短时间内的高峰请求,逐步平摊到更长的时间里去,从而避免短时间内大量请求压跨系统。
要素4:服务拆分
服务拆分一般来说有以下原则:
a)高内聚、低耦合: 将耦合性低的业务逻辑划分为不同系统,将聚合性高的业务逻辑划分为同一个系统。
b)单一职责原则:对于一个层次或者一个模块应该保持相对单一的职责,专注于自己的服务。
c)故障隔离:不同系统必须相对独立设计和运行,能够独立处理自己的故障,而不至于影响全局。
d)独立运维和持续交互:对于不同的系统可以随时迭代更新,而不至于影响其他服务。
对于服务拆分主要有纵向拆分和水平拆分两种方法。三层架构就是典型的纵向拆分模式。对于不同的业务模块,针对业务逻辑和存储服务可以按水平拆分的方法将拆分为不同的系统。比如商品系统逻辑层、订单系统逻辑层、商品系统存储层、订单系统存储层。
要素5:分布式集群化
每个服务支持多台机器部署?