文档章节

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

chaleaoch
 chaleaoch
发布于 2017/08/28 16:32
字数 743
阅读 16
收藏 0

要设计一套撸棒性强的系统,核心在于缓存,层层缓存。 从 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 连接数,最大打开文件数等等,可以优化的地方太多了。

© 著作权归作者所有

chaleaoch
粉丝 0
博文 15
码字总数 3019
作品 0
大连
程序员
私信 提问
IROS 2018 移动操作机器人竞赛冠军揭晓,华人带领的国际团队再创佳绩

雷锋网(公众号:雷锋网) AI 科技评论消息,IROS 2018 于当地时间 10 月 1-5 日在西班牙马德里召开,会上,来自新加坡松下研究院申省梅团队、新加坡南洋理工大学陈义明教授团队的联合团队 Ro...

汪思颖
2018/10/23
0
0
「对抗深度强化学习」是如何解决自动驾驶汽车系统中的「安全性」问题的?...

原文来源:arXiv 作者:Aidin Ferdowsi、 Ursula Challita、Walid Saad、Narayan B. Mandayam 「雷克世界」编译:嗯~是阿童木呀、KABUDA 对于自动驾驶汽车(AV)而言,要想在未来的智能交通系...

cf2suds8x8f0v
2018/05/08
0
0
CVPR 2018 | 牛津大学&Emotech首次严谨评估语义分割模型对对抗攻击的鲁棒性

  选自arXiv   作者:Anurag Arnab等   机器之心编译   参与:张倩、路雪      牛津大学&Emotech 实验室合作的一篇论文首次严谨评估了义分割模型对对抗攻击的鲁棒性。该研究分析...

机器之心
2018/06/03
0
0
ECCV 2018 | 对抗深度学习: 鱼 (模型准确性) 与熊掌 (模型鲁棒性) 能否兼得?

  机器之心发布   作者:Dong Su1, Huan Zhang, Hongge Chen , Jinfeng Yi, Pin-Yu Chen,   机器之心编辑部      分类的准确度长期以来都是评价图像分类模型性能的最核心甚至唯一标...

机器之心
2018/08/16
0
0
UML关系

前言: 在学习设计模式的过程中用到了各种UML的关系,所以总结一次 内容: UML:关系(4种):泛化关系,实现关系,依赖关系,关联关系(聚合,组合) 泛化关系 是一个类与另一个类的接口,可...

cjune
2017/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部