看过年人流高峰,浅聊并发之战[架构篇]

  引语:人多是好事!人多好赚钱。不过这对于技术人员来说,却也不是一个小问题,我对这种问题一直是抱以一颗敬畏之心的。这更多的是一个架构问题,作为一个开发我也就这点见识了!看着微信、支付宝等等大公司发着几个亿的红包的,我急红了眼,不是因为我错过了几个亿(实际上我基本一点都没抢到),而是羡慕他们技术上的牛掰!面对几亿人的冲击,他们巍然不动,稳稳地服务着大众人民。为此,我想写一篇关于高并发方面的文章了(大数据就不说了),希望借以抛砖引玉!

  声明:本文的主要创作方式为些许的个人经验加上网上资料的收集,并非所以都为本人亲身经历,但绝对是干货(至少我是这么认为的),希望对大家有一点点的帮助,也强烈欢迎指教!

  并发是个最常见的但是不见得都需要处理的问题。它的解决不是一点,而是一系列基础设施的配合操作完成的,我们可以不必去处理,或者只需巧妙的避开他就可以了。但是,你应该要了解大名鼎鼎的他。并发就是同一时间访问某个服务所产生的效果。

  并发可能导致以下几个问题:

    1. 写文件错误,如多写、少写、错写(严重)

    2. 数据存储读取错误,如已经产生的效果没有立即获取(客户立马就不高兴了)

    3. 服务器响应变慢,如有些需要系统自动等待锁操作(稍慢可以接受)

    4. 服务器直接挂掉,某些操作不当导致服务器资源耗尽只有挂掉了(你完了)

  发现需要解决的问题,那就对症下药吧。

  1. 写文件。这种场景基本上是在于记录日志一类的操作吧,平时没有什么实际用处,但是真的到了出事的时候,就尤其需要了,里面会记录一些操作记录,特殊操作结果情况等等。一般来说,这种文件都是以追加的形式进行写入文件的,但是因为都是写一个文件,如果同时操作,可能就会出现各种难以预料的事。当然,可能最多就是某用户写的日志被另一个给覆盖了,少一两条也话没什么关系,我最开始也是这么认为的。但是,这也是在我们的预料之中,预料之外的事鬼知道呢,我就曾经因为写日志把整个服务给整挂了掉你信不?还是,加锁吧,看情况,加读锁、写锁,慢就慢一点吧,准确性安全性放第一吧!

  2. 数据错误。这绝对是致命的,如果数据出问题了,没有给客户作好解释,基本上就是,能赔多少就赔多少,赔不了咱们就关门歇业吧!说句行外话,人们所有的操作,不都是基于对系统数据的相信吗?如果数据都错了,那谁还敢再用,毕竟,他什么也没有干啊,所有的东西都显得那么科幻!那么,并发下,我们可以做什么呢?1. 数据库该有的唯一键一定要加上(即使其他都错了也不能让真数据写进去);2. 针对特殊业务采用不同特点的数据库,一般应对高并发都要求处理速度极快,所以nosql内存数据库就是必须的了;3. 在保证数据准确的同时尽量使用查询缓存;4. 一些耗时的不需要实时的操作,仍给队列慢慢去做吧!

  3. 服务器响应慢,这个嘛,一般是通过负载均衡,分布式服务搞定的,代码里做到尽量最优化,如果还是承受不住的话,那就加机器吧!

  4. 服务器实在受不了,挂掉了,在没有影响数据准确性的情况下,重启继续干活(如果你敢的话)!

  5. 既然已经考虑到了并发的问题,我想,如果事情看起来有可能发生,那就一定会发生。做好备用方案、备用设备、紧急恢复措施可能是最重要的吧!迟早会派上用场的!

  好吧,我感觉我已经没有其他话可说了(黔驴技穷),一个字,没那么简单。给几个参考链接吧!

  微信红包的系统设计&优化(http://djt.qq.com/article/view/1349)

  混合云架构百科(http://baike.baidu.com/link?url=2MYoWz6cLxpl2qP4dW93UxJm8raufcKFEG8Pi6dtTN0e6FFi97ZE4l_KY-VrrBUaMTvFDZRbe5ccgKTEYxo9bT_GKhRFFiq-0Qy-r4kfx3d6Ia099Eo4qlTU67j00oT7)

  12306的架构设计与淘宝天猫(http://www.zhenhua.org/article.asp?id=760&utm_source=tuicool&utm_medium=referral)

  ...

  以上,就算是过年没事干,瞎搞吧!不涉及具体技术,但是真心希望指教!

时间: 2024-08-11 09:57:38

看过年人流高峰,浅聊并发之战[架构篇]的相关文章

[swift、oc]浅聊nil、Nil、NULL、NSNull的区别

我们都知道nil.Nil.NULL.NSNull都表示为空但是究竟有什么区别,相信大家也很少关注.今天我们就浅聊一下这几个空的区别 1.nil nil一般是指把一个对象置空,既完全是一个空对象,完全从内存中释放. 2.Nil Nil和nil基本没有任何区别,也可以说只要是可以使用nil的地方都可以使用Nil,反之亦然.但是作为程序猿,我们应该更加严谨一些.nil和Nil的区别在于,nil表示置空一个对象,二Nil表示置空一个类. 3.NULL 大家都知道oc 是基于c的,并且oc是完全兼容c的,

架构师初码邀你—浅聊上云思路

架构师初码邀你-浅聊上云思路 话题发布专家:初码--资深程序员,初级架构师,知名博主 在实践中,无论是个人站长还是中小企业,选择云服务,都会遇到如何上云的问题,这个问题的详细描述就是,应该选择怎样一种迁移和部署到云服务上的方式并且应该使用哪些云服务?今天我们抛开具体的技术和语言不谈,就可能出现的架构方式简单的聊一聊,以我个人的经验来看,有较多的遇到过如下3种上云场景 一.傻瓜型: 在云服务时代前,但凡提到建站,多数所指即使用虚拟主机搭建一个内容管理网站或者论坛社区网站,操作者只需要知晓简单的虚拟

包学会之浅入浅出Vue.js:升学篇

上一篇<包学会之浅入浅出Vue.js:开学篇>中,我们初步了解单页面组件这个概念,现在通过一个项目,来进一步解析组件的应用吧,Go~ 需求背景 组件库是做UI和前端日常需求中经常用到的,把一个按钮,导航,列表之类的元素封装起来,方便日常使用,调用方法只需直接写上<qui-button></qui-button>或者<qui-nav></qui-nav>这样的代码就可以,是不是很方便呢,接下来我们将要完成以下页面: 这是我们组件库的首页,包含三个子

浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)——requirejs + angular + angular-route>探讨了angular+requirejs的一个简单架构,这一篇继续来看看backbone如何跟requirejs结合. 相同地,项目架构好与坏不是说用了多少牛逼的框架,而是怎么合理利用框架,让项目开发更流畅,代码更容易管理.那么带着这个目的,我们来继续探讨backbone. 首

包学会之浅入浅出Vue.js:结业篇

在第一篇<包学会之浅入浅出Vue.js:开学篇>和上一篇<包学会之浅入浅出Vue.js:升学篇>的学习中,我们首先了解了Vue环境的搭建以及两个重要思想--路由和组件的学习,通过组件库中的按钮组件和导航组件,相信大家也开始了解相应的知识点,接下来我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程. 下面先看看我们的需求 列表组件quiList.vue 本节我们主要要完成这样一个列表功能,每一行的列表是一个组件,列表内可能出现按钮组件或者箭头组件,点击按钮组件可以自定义事件

敏捷开发之Scrum扫盲篇

敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资料的讲述方式让初学者不太容易理解:所以我决定写一篇扫盲性的博文,同时试着也与园内的朋友一起分享交流一下,希望对初学者有帮助.  什么是敏捷开发? 敏捷开发(Agile Development)是

AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs+angular+angular-route(+zepto) 最后这个zepto可有可无

浅谈大型web系统架构

动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: 1)Web前端系统 2)负载均衡系统 3)数据库集群系

iOS开发笔记--敏捷开发之Scrum扫盲篇

敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要 目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资料的讲述方式让初学者不太容易理解:所以我决定写一篇扫盲性的博文,同时试着也与园内的 朋友一起分享交流一下,希望对初学者有帮助.  什么是敏捷开发? 敏捷开发(Agile Development