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

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

作者: 冯斯特罗 | 来源:发表于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 连接数,最大打开文件数等等,可以优化的地方太多了。

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

相关文章

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

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

  • 小议Lambda与Kappa架构,不可变数据的计算探索

    Lambda架构说起来也很简单,就是通过分布式系统的组件搭建,设计出一个具有鲁棒性,可扩展,低延时的分布式计算系统...

  • 语音识别长篇研究(四)

    承接上文 语音识别长篇研究(三) 八、语音识别的瓶颈 1、鲁棒性:目前的语音识别系统对环境条件的依赖性强, 要求保...

  • 鲁棒性

    “鲁棒”的英文是robustness Huber从稳健统计的角度系统地给出了鲁棒性的3个层面的概念 模型具有较高的...

  • 设计模式杂谈

    关于设计的个人看法 我们设计一个功能的时候,要考虑的无非是那些问题:可靠性,鲁棒性,解耦性,扩展性,可读性等等。 ...

  • 鲁棒性

    鲁棒是Robust的音译,也就是健壮和强壮的意思。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错...

  • 鲁棒性

    系统的健壮度,耐用性 一般指软件系统,在异常干扰导致死机或者程序走飞后能否回到出错处理或者程序复位再次进入正常流程...

  • 剑指 offer 笔记 14 | 链表中倒数第k个结点

    题目描述输入一个链表,输出该链表中倒数第 k 个结点。 描述分析这道题涉及代码鲁棒性,所谓鲁棒性就是健壮性,是否能...

  • 鲁棒性Robust

    系统健壮性。 鲁棒是Robust的音译,也就是健壮和强壮的意思。它是在异常和危险情况下系统生存的关键。比如说,计算...

  • 怎样编写健壮的代码

    怎样编写健壮的代码 代码的几种特性 鲁棒性Robust(健壮性) 系统在异常和危险情况下生存的关键 容错性 可移植...

网友评论

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

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