美文网首页
如何设计一个鲁棒性强的系统

如何设计一个鲁棒性强的系统

作者: 冯斯特罗 | 来源:发表于2017-04-26 09:59 被阅读38次

    要设计一套撸棒性强的系统,核心在于缓存,层层缓存。
    从 cdn 缓存到 view 层缓存到业务逻辑缓存到数据库缓存到内存缓存到 cpu 一级二级等缓存。

    如果用 django ,就应该抛弃他的模板渲染。
    只基于 restful 输出 json ,然后基于 nodejs 做模板数据组装与 json 数据缓存。

    然后用户前端完全可以使用 reactjs/angularjs 做单页 web 应用,这样可以节省许多无意义的 html 数据流量,很大程度节省服务器带宽。

    nginx 和 nodejs 以及 redis 的异步 IO/事件驱动模型天生就是为这种高并发的 io 请求而生的。

    说完 web 说业务逻辑,业务逻辑可以设计的很美。
    比如创作社区,可以解耦和为博客系统,论坛系统,图片(文件)存储系统,评论系统,用户系统等。
    各个系统之间使用 restful/webservice/私有协议/异步队列来进行相互之间的通信。
    哪一个系统的模块如果成为瓶颈,那么就给这个模块增加相应的机器 /容器。
    用户多了后图片系统撑不住,负荷大大超出其他系统,那么可以给图片系统增加机器。
    在这方面, docker 是个很好的容器工具。

    一个系统拆分成一个一个足够小足够好的模块后,各模块就变成的单独的服务, a 如果依赖 b ,那么 a 直接调用 b 的服务接口。
    一个系统里模块多的话,你调用我我调用你,调用关系就会变得很复杂,变成一个网。
    *** 这时候就需要引入服务治理,需要一个注册中心给各个服务自己注册。
    java 方面阿里巴巴在这块专门有一个 dubbo 框架,基于 netty 的一个异步非阻塞的 nio 网络框架。 python 方面我还不了解。 ***

    再说业务缓存,业务缓存的设计是最能体现出一个程序员理解和提炼需求,掌控业务的能力,
    *** 基于 aop 的拦截机制 ***,哪些方法该走缓存,什么时候该刷新缓存,分布式缓存下如何做到数据的同步,这些都是细微之处见真功。
    再说数据库层面,既然选了 mongodb ,读写分离,索引什么的就不说了,如何做到基于业务的请求,少查询库。

    返回部分 json 也是调优特别该注意的地方。
    数据量上来的话,可以考虑数据分片,这方面, hadoop 等都不错。
    再说操作系统层面, linux 内核级的调优, http 连接数,最大打开文件数等等,可以优化的地方太多了。

    转载的是某个帖子的回复,当时复制粘贴了下来,出处已经找不到了。

    相关文章

      网友评论

          本文标题:如何设计一个鲁棒性强的系统

          本文链接:https://www.haomeiwen.com/subject/abqizttx.html