对一个“失败”项目的审视—架构

衡量一个产品的成败,往往所站的角度不同理解也就不同。站在一个开发人员的角度来看,判断一个产品是否成功,往往首先判断这款产品是否满足用户的需求。对于有性能扩展要求的产品,则还要考虑其是否具有较高的性能、是否便于后期扩展;对于具有代码洁癖的开发者来说,则还要看代码编写是否规范等等。

今天我们先来了解一下这款产品的架构是如何设计的,再说说它的各服务器的功能。

首先我简单说明一下架构中需要重点考虑的几点:

1:网吧断网时的处理:架构设计中要考虑到网吧和中心服务器断网的情况,所以简单的按照MMO游戏的设计方式是不可行的(这种情况虽不常见,但是经常会由于网络不稳定而出现,有时也会因为一些其它原因而导致,例如某地区曾出现一整年断网情况),所以架构设计时需要处理:当网吧服务器和中心服务器断开后,网吧要能进行正常的业务处理;同时,当网吧服务器和中心服务器重新建立连接以后,需要将网吧在断线时间段内所处理的所有数据重新的发送到中心服务器上,并进行继续处理。

2:网吧业务连续性:对于网吧业务来说会存在一定的业务连续性,例如网吧的业务一定是先上机,后下机。这种业务如果处理顺序错乱,后果不堪设想。

3:网吧数据不准确:由于可能出现网吧网管勾结外部人员修改网吧营业数据的情况,因此网吧本地的数据不存在可信性(这里的数据指的是诸如营业流水等数据),需要中心服务器记录网吧所有的营业情况,并以重新计算得到的数据为准。

4:网吧数据产生的时段性:去过网吧的人都知道,网吧在一天之中业务数据产生的时间并非都是均匀的,例如在晚上10点以后到第二天7点左右(各网吧情况不同而定)一般是很少产生业务数据的,因为这段时间属于通宵包机时间;而在早晨8-9点属于网吧清场开业时间,这段时间会有数据大量产生。同时在周末的时候网吧也会出现业务数据产生的高峰期。基于以上的情况,架构的设计要能处理网吧业务数据瞬间变高的情况。

以上4点是系统设计时所要重点考虑的,尤其是第一点(是不是觉得考虑得很周到?但我要剧透的是,这种面面俱到的考虑其实是华丽丽的自虐。这个问题我以后会详说)。

我设计的架构图是这样的:

在这个架构中每个核心服务器的功能概要说明:

1:网关服务器:

(1):用来接收大量的并发网吧服务端连接请求。

(2):接收网吧服务端的业务请求后,根据请求类型进行分析,并将请求发送给相应的后端业务处理服务器。

(3):接收后端业务处理服务器返回的业务处理数据,并将此数据转发给相应的网吧服务端。

2:帐号服务器:

(1):对网吧的帐号信息进行合法性验证。

3:上报服务器:

(1):接收网吧业务中需要上报的业务(例如:用户上机、下机、加钱、积分转换等等)进行业务逻辑处理。

(2):由于网吧业务存在前后逻辑关系,因此在处理的时候需要对网吧上传的业务进行顺序性处理。

4:同步服务器:

(1):检测网吧服务端相关数据是否和中心数据库中的一致(费率数据、会员数据、营业流水等等),对于不一致的数据,采用同步方式强行让网吧数据和中心数据库数据一致。

外围服务器功能概要说明:

1:负载均衡服务器:

(1):针对网吧帐号、所在区域等等信息对网吧应该连接的反向代理服务器的IP和端口进行指定。

(2):为了防止恶意连接反向代理服务器,负载均衡服务器为每一个网吧生成具有一定时效性的session。

(3):接收反向代理服务器的消息,对网吧帐号和session进行认证。

2:日志服务器:

(1):记录所有服务器的日志信息。

(2):对所有日志进行相关分析,提取出Error级别的日志,并将此类日志保存在数据库中。

3:监控服务器:

(1):监控所有服务器的运行情况,对于出现异常而宕掉的服务器程序进行自动运行,并向相关负责人发送短信报警。

(2):定时从Error日志数据库中提取相关日志,并将信息进行汇总后以短信(邮件)的方式发送给相关责任人。

对一个“失败”项目的审视—架构

时间: 2024-10-10 02:20:14

对一个“失败”项目的审视—架构的相关文章

对一个“失败”项目的审视—前言

总说自己牛B的人-狂妄自大 总笑自己傻B的人-妄自菲薄. 我相信任何一位牛B的人都曾做过傻B的事, 所以得出的结论是:一位牛人的诞生,是由N多傻B的人.傻B的事所磨练出来的. 我并非牛人,却已经做过很多傻B的项目.有的项目初期设计非常牛B,但是随着时间的推移.人员的更迭.预算的缩水,到头来变成了一款鸡肋的产品--食之无味弃之可惜. 以下几篇文章,我会从架构设计.实际编码.人员管理等诸多方面来分析一款我设想得很牛B,最后却做得很傻B的项目.当然,我这里所谓"傻B",指的是一种主观上的失败

对一个“失败”项目的审视—分析

洋洋洒洒写了好多字啊,我都没想到我能写这么多字来.看了上面的架构一定有人会想"不对吧,你在第一篇中可是写的是11种服务器啊,你数一数上面的架构图上才几个?老兄啊,你别是为了点击率而忽悠我们吧".对于存有这种看法的看客,我只能说"您看的可真细致啊!"上面的这个架构图的确和我第一篇中写的11种服务器的架构不同,那是因为上面的图是目前的架构图,而11种服务器则是第一版的产品架构.大家可以来看看第一版和目前版本架构图的区别. 后来将网关服务器和逻辑处理服务器合并:帐号服务器

如何架构一个 React 项目?

编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有多种.我相信,根据你的实际情况对架构进行演进,要远比坚持一些条条框框的教条更好.接下来我将会介绍一些基础的方法以资您思考. 将所有的东西都放在一个文件中 最简单的项目可以被放到一个文件之中.而这就是我所选择的用来处理我的Webpack 配置的方法.这种方法最大的好处就是所有你需要的东西都在这一个文件

项目流程管理&&架构总结

1 项目背景 所在业务在早期没有营销费用,买家购买商品的折扣优惠是由卖家提供的,所有订单的最终价格是由卖家和业务方确定的,整个购买流程很简单. 现在此业务收受到公司重视,业务团队能申请到营销费用,业务团队能主动补贴折扣优惠.一件东西进行促销时,用户购买此物品后,由业务方出钱补贴折扣的费用,而卖家不需要考虑优惠折扣.实现这种营销需求需要和第三方的团队合作,例如商家营销团队.账务团队. 2 项目管理 团队协作 项目开始的时候,我方向这2个团体介绍业务背景,提产品需求,开头很顺利:业务边界范围的界定.

www808888webcom基金的一个开源项目19908836661也是apache基金的一个开源

Flume也是apache基金的一个开源项目,由cloudera公司开发的一款分布式.高可靠.高可用的日志传输工具.其以agent为一个单位,agent由source.channel和sink构成.一个agent最少由一个source.channel和sink构成,数量可以自由组合 Source主要用来收集源数据,并对源数据进行反序列化.Source在读取数据文件时,会遍历日志文件中的每一行,并把这一行封装在一个event当中,一个event包含一个header和一个body,header是一个

vue.js使用vue-cli搭建一个SPA项目

WHY 之所以写这篇如何运用脚手架自动化构建出一个项目的大架构,主要是面向想入门vue的小伙伴.之前,我第一次接触vue,一直摸不着头脑,想在网上搜个接地气的教程都找不到.SO,我以如何搭建结构为开始,向想入门vue的童鞋们把我仅有的力量贡献出来,随后我会持续更新vue如何与ui框架结合使用:在低版本ie如何运用vwjs将其打包为桌面应用以及我在实际开发的过程中踩过的各种坑.欢迎大家观看与互相交流哦. HOW 话不多说,切入主题 1.首先,你的电脑需要nodejs环境,如果没有,点击下面链接去下

XAF_GS_02_创建第一个XAF项目

上一节我们讲解了如何安装XAF环境,这次我们要开始创建一个自己的XAF项目. Setp 1 第一步打开你的Visual Studio,新建项目,如下图所示,选择DevExpress XAF,选择好你的路径,修改好你的解决方案名称我们就点下一步了把. Setp 2 XAF Solution Wizard Choose ORM(选择你的需要的平台) 接下来我们将会看到三个选项,(注意:低版本的DevExpress没有Mobile(CTP)) Windows:Winform程序,在Windows上运行

如何了解一个Web项目

一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring ioc->log->代码 1.先了解项目数据库的表结构,这个方面是最容易忘记的,有时候我们只顾着看每一个方法是怎么进行的,却没有去了解数据库之间的主外键关联.其实如果先了解数据库表结构,再去看一个方法的实现会更加容易. 2.然后需要过一遍web.xml,知道项目中用到了什么拦截器,监听器,过滤器,拥有哪些配置文件.如果是拦截器,一般负责过滤请求,进行AOP等:如

WPF入门教程系列(一) 创建你的第一个WPF项目

WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础了. 2) HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTML.XHTML.ASP.NET之路的东西的话会,接受这些标签会很有帮助的,如