对一个“失败”项目的审视—分析
洋洋洒洒写了好多字啊,我都没想到我能写这么多字来。看了上面的架构一定有人会想“不对吧,你在第一篇中可是写的是11种服务器啊,你数一数上面的架构图上才几个?老兄啊,你别是为了点击率而忽悠我们吧”。对于存有这种看法的看客,我只能说“您看的可真细致啊!”上面的这个架构图的确和我第一篇中写的11种服务器的架构不同,那是因为上面的图是目前的架构图,而11种服务器则是第一版的产品架构。大家可以来看看第一版和目前版本架构图的区别。
后来将网关服务器和逻辑处理服务器合并;帐号服务器和认证服务器合并;统计服务器、公告服务器、在线服务器砍掉;计费服务器拆分成上报服务器和同步服务器。所以大家就看到了上一篇中的架构图。
看到上面的架构图以后不知道大家会有何感想,反正我听到领导好几次用Perfect来形容。当时自己也沾沾自喜了好久。
不过随着项目的完成,以及性能测试和压力测试的开展,却发现了一个非常大的问题—性能低下。更有甚者当网吧的一个结账业务发送到上报服务器以后,上报服务器竟然需要2-3秒钟才能处理完毕。这几乎是灾难性的,要知道每个网吧我们的评估是每天上报2000条数据,这样一来,一组服务器所能支持的网吧数量则少的可怜。同时处理速度过慢,会在业务上出现很大的漏洞。例如以连锁网吧为例,用户1在连锁网吧中的A进行消费100块钱以后,抢在连锁网吧数据同步之前(由于处理速度太慢,而造成了延迟)又在连锁网吧B中进行消费,这样以来相当于用户1进行了重复性消费。容易造成网吧账目出现大量的负帐(用户1消费完后,不再进行消费),这对目前薄利的网吧行业的打击无疑是巨大的。
究其原因,我觉得主要是因为我们在处理所有业务的时候都是采取了先从SQL SERVER数据库中查询数据,然后再进行计算,并将SQL SERVER数据库中的相关数据进行修改的方式。要知道对于一个复杂的业务,这种查询是多次的。修改的内容也会涉及到好几张不同的表。
就拿网吧用户表为例,一张表中会存放将近3000万条的数据,即便是通过分库分表的方式,虽然可以缓解,但也只能指标不能治本。
第二个问题是由于网吧数据是放在网吧服务器上,网吧每次交班时的交班金额是按照网吧本地数据计算出来的。而网吧的每一条业务都上报给中心服务器,中心服务器会重新对数据计算一次;并且当网吧服务器重启的时候,对于网吧服务器和中心服务器上不一致的数据进行强制更新。这个流程中出现了两次计算,并且在不同的业务中以不同的计算结果作为依据(网吧中的交班和中心服务器中的强制数据更新)。这样一来势必会出现数据不正确的问题(事实上,在产品刚上线不久的时候,我们的DBA都是在进行数据的修正,即将中心服务器的数据修改成网吧的数据)。
以上两个问题一直困扰着我很久,因为如果产品做成这样的话,在市场上就几乎无法进行推广的。直到后来我离开这家公司以后,才想到了使用NOSQL来实现。
本文转自狗窝博客51CTO博客,原文链接http://blog.51cto.com/fxh7622/1544726如需转载请自行联系原作者
fxh7622

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
django 1.2.1更新后 关于CSRF token missing or incorrect的问题
CSRF(跨站请求伪造),django 1.2.1在projects的setting中默认配置了处理CSRF的中间件 'django.middleware.csrf.CsrfViewMiddleware', 因此,如果post提交表单的html代码如下,django会抛出一个异常. CSRF token missing or incorrect. < form action ="{%url listenCms:submitComment articleObj.id %}" method ="post" > < div class ="commentTextArea" > < textarea name ="content" cols ="" rows="" > </textarea> < input name ="articleId" type ="hidden" value ="`articleObj`.`id`" /> </div> < input name ="submit" value ="...
- 下一篇
运行第一个Docker容器-Docker for Web Developers(1)
1. Docker介绍 Docker由dotCloud公司发起的一个内部项目,后来Docker火了,dotCloud公司改名为Docker了; Docker使用了Go语言开发,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术; Docker vs VM如下图所示: 2. Docker的安装 Docker现在区分Community Edition,简称:CE版本;Enterprise Edition,简称:EE。两个版本,一个免费,一个付费。所以我们安装的是的CE版本。安装步骤在官方完成有详细的的说明,这里略过。 我在DO上的服务器操作系统版本是:Ubuntu 14.04 LTS。安装官方文档,能顺利安装成功。 Docker CE for Ubuntu 3. Docker架构 4. 运行第一个容器 运行容器可以通过两种方式: 4.1 通过Dockerfile构建一个镜像,上传到Docker Hub上,然后在host主机上pull这个镜像,运行一个容器 4.2 通过docker pu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址