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

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

后来将网关服务器和逻辑处理服务器合并;帐号服务器和认证服务器合并;统计服务器、公告服务器、在线服务器砍掉;计费服务器拆分成上报服务器和同步服务器。所以大家就看到了上一篇中的架构图。

看到上面的架构图以后不知道大家会有何感想,反正我听到领导好几次用Perfect来形容。当时自己也沾沾自喜了好久。

不过随着项目的完成,以及性能测试和压力测试的开展,却发现了一个非常大的问题—性能低下。更有甚者当网吧的一个结账业务发送到上报服务器以后,上报服务器竟然需要2-3秒钟才能处理完毕。这几乎是灾难性的,要知道每个网吧我们的评估是每天上报2000条数据,这样一来,一组服务器所能支持的网吧数量则少的可怜。同时处理速度过慢,会在业务上出现很大的漏洞。例如以连锁网吧为例,用户1在连锁网吧中的A进行消费100块钱以后,抢在连锁网吧数据同步之前(由于处理速度太慢,而造成了延迟)又在连锁网吧B中进行消费,这样以来相当于用户1进行了重复性消费。容易造成网吧账目出现大量的负帐(用户1消费完后,不再进行消费),这对目前薄利的网吧行业的打击无疑是巨大的。

究其原因,我觉得主要是因为我们在处理所有业务的时候都是采取了先从SQL SERVER数据库中查询数据,然后再进行计算,并将SQL SERVER数据库中的相关数据进行修改的方式。要知道对于一个复杂的业务,这种查询是多次的。修改的内容也会涉及到好几张不同的表。

就拿网吧用户表为例,一张表中会存放将近3000万条的数据,即便是通过分库分表的方式,虽然可以缓解,但也只能指标不能治本。

第二个问题是由于网吧数据是放在网吧服务器上,网吧每次交班时的交班金额是按照网吧本地数据计算出来的。而网吧的每一条业务都上报给中心服务器,中心服务器会重新对数据计算一次;并且当网吧服务器重启的时候,对于网吧服务器和中心服务器上不一致的数据进行强制更新。这个流程中出现了两次计算,并且在不同的业务中以不同的计算结果作为依据(网吧中的交班和中心服务器中的强制数据更新)。这样一来势必会出现数据不正确的问题(事实上,在产品刚上线不久的时候,我们的DBA都是在进行数据的修正,即将中心服务器的数据修改成网吧的数据)。

以上两个问题一直困扰着我很久,因为如果产品做成这样的话,在市场上就几乎无法进行推广的。直到后来我离开这家公司以后,才想到了使用NOSQL来实现。

时间: 2024-10-14 18:19:59

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

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

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

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

衡量一个产品的成败,往往所站的角度不同理解也就不同.站在一个开发人员的角度来看,判断一个产品是否成功,往往首先判断这款产品是否满足用户的需求.对于有性能扩展要求的产品,则还要考虑其是否具有较高的性能.是否便于后期扩展:对于具有代码洁癖的开发者来说,则还要看代码编写是否规范等等. 今天我们先来了解一下这款产品的架构是如何设计的,再说说它的各服务器的功能. 首先我简单说明一下架构中需要重点考虑的几点: 1:网吧断网时的处理:架构设计中要考虑到网吧和中心服务器断网的情况,所以简单的按照MMO游戏的设计

03-第一个C语言程序的分析

一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 在上一篇中我们已经创建了一个C程序,接下来分析一下里面的代码. 项目结构如下: 回到顶部 一.代码分析 打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下: 1 #include <stdio.h> 2 3 int

对团队项目的意见和项目需求的分析

     一个软件团队是否能开发出好的软件项目,关键一点就是是否能把握好对项目需求的分析.软件团队如何才能准确而全面的找到这些需求呢?主要有以下几个步骤.     1.获取和引导需求:软件团队需要设身处地,替用户着想,引导出需求.有的需求在时间之前,并没有用户明确表达具体的需求,但是成功的团队可以从成功挖掘出用户的需求. 除此之外,软件团队可以分析技术的发展趋势以及产业的变化.社会发展的大趋势,推测用户会产生新的需求.并且,需求不仅来自于外界,还可以来自于软件企业本身,或者技术团队本身技术性的要

100offer举办的「寻找实干和坚持的技术力量」开源项目投票排名分析程序

由于100offer举办的「寻找实干和坚持的技术力量」开源项目投票活动没有按照票数排序的功能,所以本文写了个小程序来实现这个功能,代码如下: import org.jsoup.Jsoup; import org.jsoup.nodes.Element; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; /**

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

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

第一个WebAPI项目

(1)新建一个ASP.NET MVC项目,取名为:MyMvcWebAPIDemo,项目类型选择WebAPI. (2)在Models中新增一个类,取名为:Product,作为我们要测试的实体模型. 1 2 3 4 5 6 7 public class Product { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public decimal Pr

一个Web页面的问题分析

一个Web页面的问题分析 几个月之前我接到一个新的开发任务,要在一个旧的Web页面上面增添一些新的功能.在开发的过程中发现旧的代码中有很多常见的不合适的写法,结合这些问题,如何写出更好的,更规范的,更可维护的代码,就是这篇文章要阐述的内容. 首先我查看了该Web页面的HTML代码,发现了一些典型的问题: HTML页面中包含了很多Javascript和CSS代码 HTML页面中引用了大量的外部Javascript文件和CSS文件 接下来就这些问题,我们逐个讨论一下: HTML页面中包含了很多Jav

HTML JS文字闪烁实现(项目top.htm分析)

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <!-- saved from url=(0033)https://192.168.1.2/topframe6.htm --> 3 <HTML><HEAD><TITLE>topframe</TITLE> 4 <META http-equiv=Content-Type conte