服务器入门之一 ---- 以数据库为中心
来源:互联网 发布:淘宝体检中心链接 编辑:程序博客网 时间:2024/06/10 06:00
此是多年来第一次认真写点东西, 是为分享这几年积累的些许经验,并且后面再招新人,
都只让他们来看这些文章就够了,不再一点一滴去教。
开始这一系列的书写,主要受这个文章影响,唐巧的《作为码农,我们为什么要写作》,
没开始看,光看了标题,我就想到,我是该写写东西了。
曾经,我入了一个误区,开发的时候,如果有个功能上是比较逻辑独立的需求,我就会想要
用已经成熟了的服务器模板写一个新的功能服务器来支持。结果,导致有大量的功能服务器出现,
五花八门。这是一个严重的问题,管理起来麻烦,维护起来更麻烦,很伤脑筋。
切入正题,以数据库为中心,数据库这里不单指关系型数据库,还包括NoSQL中的键值数据库,
文档型数据库。这么看问题,我们服务器最终是输入输出,还有保存中间数据。而这个数据恰好是
整个过程的中心,一切其实都是围绕数据来的,不管这数据在哪里,是永久存起来,还是临时cache
了,或者只存在于服务器与服务器之间的通讯之中。
举个例子,我们的游戏平台要实现一套im系统,支持聊天,以及相关游戏功能的交互,我们
本来没什么这类经验的,所以一开始的时候比较抓急,当然也按照各个功能点的实现,设计出了整个
系统,但几乎都是要手写各种服务器来支持,比如要保存跟广播用户的状态变化,就写了状态服务器,
要缓存用户的基本信息,避免对用户数据库造成太大的压力,就写了用户信息服务器,要转发用户之间
的聊天消息,就写了聊天服务器,要管理用户之间的好友关系,就写了好友服务器...
这时候已经看得人有些小崩溃了。是的,我们就这样实现出来了,当然,也正常的跑着,不过时不
时出点故障,因为系统复杂了,一个小地方出问题都会影响到全局。
没写过烂东西,其实很难体会一个好的东西要是什么样子的。
就上面讲的,直接说下如何优化,这时候就得以数据库为中心了。
状态服务器: 得用redis这种内存数据库来改造,1.状态的存储,直接写入redis,2.状态的广播,直接使用redis的订阅发布其实就够了,把一个个用户当成一个频道,它的好友所在的连接服务器都可以订阅它的好友的频道。
用户信息服务器:也用redis或memcache就够了,在访问用户数据库前先去redis取一下,取不到再从用户db取,取了set回redis。
聊天服务器:可以不存在的,连接服务器之间直接
好友服务器:可以不存在的,如何处理加好友请求?连接服务器(其实这里是一个小小的逻辑服务器,会有多个来承载所有的用户连接)直接将请求写入数据库返回一个请求id,再从redis取出目标用户所在的服务器,直接向该服务器发起一个通知,目标服务器收到通知,如果被加的人在此服务器上,则从db取出这条请求来处理,否则就等用户登陆的时候取出所有的离线请求来处理。 如果处理同意加好友请求?也是连接服务器直接来。
- 服务器入门之一 ---- 以数据库为中心
- 以数据库为中心与面向数据库
- 以自我为中心
- 以客户为中心
- 以数据库为中心的时代已经终结
- 以数据库为中心的时代已经终结
- 从以主机为中心到以内容为中心
- 深思“以客户为中心”
- 流程以客户为中心
- #以应用为中心的无服务器PaaS将成主流
- [转]以数据库为中心的系统中的业务逻辑组织方式
- Linux 将不以 pc 为中心
- 关于XML:以对象模型为中心
- 构建以数据为中心的应用程序
- 微软应以开发者为中心
- 以客户为中心的电子商务模式
- 以服务为中心的企业整合
- 以企业为中心的SOI
- java打印数字金字塔,适用于所有数
- SQLServer 2000 定时任务(作业执行)
- UVA 12304 - 2D Geometry 110 in 1!(计算几何)
- 如何学习FPGA
- BZOJ2938: [Poi2000]病毒
- 服务器入门之一 ---- 以数据库为中心
- POJ 1006 I Think I Need a Houseboat(二分)
- 高仿 QQ 侧滑删除 Item 的效果
- TextView样式多样化(字体的大小和颜色)
- ? HDU 1316
- UVa536_Tree Recovery
- 六角填数
- Camera图像处理原理及实例分析 - 色彩篇
- (hdu step 8.3.1)Tr A(矩阵快速幂——求矩阵m的n次幂的迹%k的结果)