上几天,以前公司一个同事在Q群上发了一个《高性能存储平台设计文档》,说请大家帮忙看下,指点一下。

下图是这个设计里的【系统主体架构图】:

看了当即觉得有点蛋疼。

首先是网关那里,使用的是PHP来做守护进程;其次数据节点使用MongoDB和MySQL来做主从,对,你没看错,可是MongoDB和MySQL怎么做主从?那哥们说,利用PHP做控制。

对于这个架构,我不怎么给面子,直接批为不行。那哥们跟我一样,只懂PHP,不懂C++,所以会写出这样的架构也就不奇怪了。但是即使是不懂C++我也知道,要做到高性能不能用PHP。PHP 1.不支持多线程,2.进程非常笨重,加载的东西太多,3.解释性语言运行速度比C++慢一个数量级,4.长期运行稳定性差。5.而且要做到高并发最好是使用epoll模板,要使用epoll模型就要用到libevent,据我所知PHP是没有这个扩展的。单靠PHP自己的话,估计几百个并发就将网关的内存和CPU耗尽了。

我问那哥们这个模型的一些关键点如何处理:

1.选择节点的一致性hash算法是怎样的,如何保证SELECT和UPDATE操作的数据在同一个节点上。

2.MongoDB和MySQL间的数据主从同步如何保证,出现异常如何处理。

3.MongoDB缓存数据的淘汰机制如何考虑。

4.由于MongoDB和MySQL的操作是异步的,能否保证异常的情况下,数据在MySQL端不丢失。

5.每个节点可以达到多高的读写性能。整个系统总体的读写性能又如何。

哥们无法很好的回答以上的问题,我看出来他只是将一些很棒、看起来好玩的技术拼合在一起而已。

其实我以前也经常像我那哥们一样,不满足于做单调乏味的运营开发工作,希望在技术上往横向和纵向不断发展。可是受限于自己的知识和技能,所以往往会向一些看上去更浅短易懂的方向去做尝试。例如画系统架构图就是一个看上去比较简单的、又让人觉得是比较牛B的工作。一想到自己设计的架构可以支撑海量用户,一股成就感就涌上心头。

后来一次跟组长tenfy和总监minos的谈话让我的困惑顿结。那是在一次方案评审会上。我在数据层的设计上,担心服务器承受不住压力,所以打算使用cache。不过这样做就会增加系统复杂度,要考虑处理各种cache和DB间的异常情况,拉长开发时间。但是minos和tenfy否决了cache方案,说直接查询MySQL就行了。minos向我们解释,淘宝在查询个人订单的时候,就是直接读数据库的。如果使用cache的话,就会有cache数据和DB不一致的问题需要解决,复杂度大大增加了。可是直接查DB不担心服务器压力的问题吗?minos说淘宝做过统计,用户查看个人订单的访问次数很少,直查DB完全可以撑得住这个量。

会后tenfy又跟我们说了系统架构设计方面的一些经验。他问我们,知道我们外网DB服务器平均每秒可以处理多少次查询请求吗?如果使用了cache后,又可以支撑多少次查询请求?系统的最高并发是多少?知道我们的网站现在一天的PV是多少吗,高峰值是多少?要支撑目前的业务,最好使用哪些技术,而这些技术的性能又是如何,极限值是多少,优点是什么,缺点又是什么?要支撑每天的访问高峰,至少需要几台机器?而这些机器间应该用什么技术去联合成一个架构,DB主从?LVS?每种架构的性能表现又是如何,优点和缺点又是什么?成本呢?

对于以上这些运维数据,我是一点都不清楚的,而tenfy则几乎都能说出这些数据的一个大概值。tenfy说,只要对所有的这些数据了然于心,在设计项目架构的时候就能很快想出在成本、性能、时间、复杂度等权衡最优的架构。从这里可以看出,设计架构这件事并不是简单的画图,也不是简单的将一些技术拼合起来,更不是拍脑袋的事情。它是需要根据实际数据分析后才能决定的事情。

转载于:https://www.cnblogs.com/lefeng/archive/2012/05/13/2498074.html

关于架构的一点思考(一)相关推荐

  1. 关于冯诺依曼架构和哈佛架构的一点思考

    目录 1 冯诺依曼架构 2 哈佛架构 2.1 从软件的角度看哈佛架构 2.2 从硬件的角度看哈佛架构 3 混合架构(改进的哈佛架构) 3.1 MCU使用的混合架构 3.2 MPU使用的混合架构 3.3 ...

  2. 微软MVC对架构的一点思考

    毕业即将三年,在学校学习.做毕设一直使用拖控件的 Winform\WebForm,工作后公司采用MVC3架构做项目. 下面使用mvc的个人总结 : 1.架构上分层清晰.便于研发,耦合性好 2.缓存机制 ...

  3. 系统架构设计的一点思考

    原文链接:https://mp.weixin.qq.com/s/2vATENTGyqtyWx1Xjqj-_g 系统化思维在以前的文章中,有提到过很多.总结为三个方面. 1.系统三要素:元素.元素之间的 ...

  4. 对高并发流量控制的一点思考 推荐

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  5. 『飞秋』关于ASP.NET MVC+Repository+Service架构的一些思考

    『飞秋』关于ASP.NET MVC+Repository+Service架构的一些思考 看了一些ASP.NET MVC开源项目后的一些想法,关于ASP.NET MVC+Repository+Servi ...

  6. 关于前端职业规划的一点思考

    自己目前已经工作3年了,最近也刚换了新工作,日常也一直在考虑自己的前端职业规划到底是怎样的,目前个人视角还不是很宽广,怕误人子弟,以下这篇文章有点启发,故转发供大家借鉴(里面有部分内容做了一些小修改) ...

  7. 对软件项目开发的一点思考

    今天看到同事写的一些思考,感觉还不错,真的是通过这个项目让他成长起来了. 目录 I 1 引言 1 2 概念 1 3 国内软件项目角色分析 1 4 国内项目的一般性问题 2 5 客户与项目组对需求的认知 ...

  8. 关于职业生涯发展的一点思考

    职业类型 从学校毕业步入社会,即正式开始了人生职业生涯发展的第一步. 总括地说,大概有以下几类职业: 当公务员,从政 创立公司,当企业家 找一份工作,成为职员 这三条道路,几乎概括了大部分普通人的选择 ...

  9. 对zebra的一点思考Think_Of_ZEBRA

    目录 对zebra的一点思考(Think Of ZEBRA 对zebra的一点思考(Think Of ZEBRA 此文并不针对zebra的应用,甚至不是一个架构的分析,只是对于Zebra的一点儿思考. ...

最新文章

  1. 防火墙产品原理与应用:NAT支持的特殊协议
  2. 【Java源码分析】集合框架-Collections工具类-Arrays工具类
  3. JQuery源码-------JQuery中数值型变量的判断isNumeric
  4. spring中的CGLIB动态代理(代码)
  5. 开源免费的.NET图像即时处理的组件ImageProcessor
  6. Linux C高级编程——时间编程
  7. 千呼万唤始出来,OpenCV 4.0正式发布!
  8. 精神独立,才是一个人最大的底气
  9. jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001]
  10. mysql sync es 异步双写_mysql数据同步es方案思考
  11. Jmail组件在C#中发送邮件代码:
  12. 重磅!泰晤士发布重量级学科排名,90所中国大陆高校上榜!
  13. github下载慢时可采用码云快速下载资源
  14. python 反编译exe
  15. Hybrid APP混合开发
  16. dither(抖动)
  17. 免费视频存储平台(微云、百度网盘、谷歌硬盘、酷播云)的截图对比
  18. 7-4 房产税费计算2022(分数 12)
  19. 机器学习实验——分类学习算法
  20. 值得收藏!VScode 中这 15 个神仙插件写代码必备!

热门文章

  1. Django:模型model和数据库mysql(一)
  2. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验
  3. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set
  4. 异步编程 In .NET(转载)
  5. python练习册 每天一个小程序 第0009题
  6. Mysql错误问题:ERROR 1005 (HY000): Can't create table 'crm_1.tbl_client' (errno: 150)
  7. 【Sass】+【Compass】学习笔记
  8. input与select在不同浏览器上的宽度显示不同及IE背景图显示问题
  9. linux: convmv =-======pkgs.org
  10. Delphi 2007体验!