JeffSunpan27

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

系统特点

1.提供的服务多

2.依赖的数据源多样化,数据库、HTTP接口、RPC接口等

3.系统以读为主,写方面主要是下单流程,活动

4.整体服务加起来体量大[访问量+数据量(sku、商品、价格)]

5.需要快速响应,影响用户浏览下单体验

6.服务之间相互影响性要小[服务化]

基本原则

  • 使用HTTP/HTTPS提供服务:服务化后对于使用不同语言实现的不同系统,HTTP从便捷和使用范围上有绝对的优势

  • 使用短连接:

  1. 在HTTP中开启长连接需要在协议头中加上Connection:keep-alive,当然最终是否使用长连接通信是需要双方进行协商的,客户端和服务端只要有一方不同意,则开启失败。长连接因为可以复用链路,所以如果请求频繁,可以减少连接的建立和关闭时间,从而节省资源。

  2. 既然长连接这么『好』,短连接这么『不好』为什么还要使用短连接呢?我们知道这个『连接』实际上是TCP连接。TCP连接是有一个四元组表示的,如[源ip:源port—目标ip:目标port]。从这个四元组可以看到理论上可以有无数个连接, 但是操作系统能够承受的连接可是有限的,假设我们设置了长连接,那么不管这个时间有多短,在高并发下server端都会产生大量的TCP连接,操作系统维护每个连接不但要消耗内存也会消耗CPU,在高并发下维护过多的活跃连接风险可想而知。

  3. 而且在长连接的情况下如果有人搞恶意攻击,创建完连接后什么都不做,势必会对Server产生不小的压力。所以在互联网这种高并发系统中,使用短连接是一个明智的选择。对于服务端因短连接产生的大量的TIME_WAIT状态的连接,可以更改系统的一些内核参数来控制,比如net.ipv4.tcp_max_tw_buckets、net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse等参数

  • 数据异构:
  1. 一个大的原则,如果依赖的服务不可靠,那系统就可能随时出问题。对于依赖服务的数据,能异构的就要拿过来,有了数据就可以做任何你想做的事,有了数据,依赖服务再怎么变着花的挂对你的影响也是有限的。

  2. 异构时可以将数据打散,将数据原子化,这样在向外提供服务时,可以任意组装拼合。

  • 巧用缓存

  • 流量控制

  • 异步、并行

  • 数据托底

  • 防刷

  • 降级

  • 多域名

posted on 2017-12-23 20:19  JeffSunpan27  阅读(474)  评论(0编辑  收藏  举报