随笔分类 -  08. 架构经验&数据库技术

系统架构设计
摘要:对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑。但是,当同时在线的用户数达到几万、几十万、甚至百万的时候,我们就需要很多的服务器来分担负载。但是,依据什么规则和结构来组织这些服务器,并使它们能相互协调合作,是最关键的问题。如果你的通信应用是基于ESFramework通信框架构建的,当 阅读全文
posted @ 2011-03-31 16:25 zhuweisky 阅读(2677) 评论(5) 推荐(5) 编辑
摘要:以前写的关于架构经验方面的文章(如上一篇实战中演化的三层架构)都是从整体的角度出发的,采用全局的视角,本文我们将拉近镜头,聚焦于日志记录这一块。随着做软件的时间越长、经验积累得越来越多,就越觉得日志记录的重要。 日志记录的主要作用可以从正反两个方面来说:(1)如果程序运行出现问题,可以通过相关日志快速定位到出问题的地方,找到问题的根源,从而快速解决问题。对于已上线的系统来说,如果出现一个bug,通常,解决这个bug的时间主要花在定位bug上,一旦找到bug根源,修复它是非常快的。而恰当的日志记录可以帮我们迅速定位bug。(2)确保我们的系统运行在正常状态。当我们看到日志中类似“***成功完成. 阅读全文
posted @ 2011-02-24 15:31 zhuweisky 阅读(6125) 评论(10) 推荐(8) 编辑
摘要:作为一个搞软件的,能有机会经历被黑客攻击、并参与到抵抗攻击方案的讨论与实施中来,我觉得是很幸运的。虽然每天都有很多攻击产生,但是这种攻击能降临到我们这种不是很知名的公司身上,确实非常难得。下面就把我们对攻击相关的一些认识整理一下并记录,我们也是刚开始积累这些经验,所以有什么错误和不足之处,希望大家不吝斧正和补充。 虽然,我们经常看到一些门户网站被攻击,但是攻击者并不局限于只攻击网站,他可以攻击你对外提供的一切服务,比如,攻击你的游戏服务器、攻击DNS服务器等等。一、为什么会产生攻击?所有攻击的产生都有其背后的原因,我们能想到的有以下几点:(1)黑客小试身手,拿你的服务做试验。真正有实力的黑客是 阅读全文
posted @ 2011-01-05 17:20 zhuweisky 阅读(3067) 评论(3) 推荐(4) 编辑
摘要:我们的网络游戏采用tcp进行通信,服务端程序绑定8300端口,为游戏客户端提供服务,游戏已经上线稳定运行两年多,从今年9月份开始至今碰到了3次攻击,3次攻击所导致的情况一样,描述如下: (1)从应用层上来看,攻击者每次攻击时,与8300端口都有建立最多两、三百个tcp连接。 (2)从防火墙监控来看, 阅读全文
posted @ 2010-12-23 10:30 zhuweisky 阅读(14292) 评论(45) 推荐(8) 编辑
摘要:成熟的C#网络通信框架ESFramework,从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括安卓、IOS、Xamarin等多个平台的跨平台通信框架。 阅读全文
posted @ 2010-08-12 15:54 zhuweisky 阅读(39298) 评论(63) 推荐(35) 编辑
摘要:系统架构的思想是重要的,但是架构不能纸上谈兵、不能脱离实践。 阅读全文
posted @ 2009-05-13 16:19 zhuweisky 阅读(11313) 评论(37) 推荐(1) 编辑
摘要:本文讨论针对大型数据表(记录数2千万以上)进行数据查找与分页的可行的高效方案。 阅读全文
posted @ 2009-01-09 17:24 zhuweisky 阅读(4449) 评论(10) 推荐(0) 编辑
摘要:正如ORM名称所指示的,实现ORM的关键点在于解决“对象--关系”之间的映射,例如,如何将一个DataRow转换为一个Entity Object,又如何将一个对某Entity Object的操作映射到一个IDbCommand,等等。我们以DataRabbit为例,在DataRabbit中,使用IO... 阅读全文
posted @ 2008-12-24 10:46 zhuweisky 阅读(6382) 评论(6) 推荐(0) 编辑
摘要:这段时间在对我们的棋牌系统做压力测试,模拟3000用户同时在线的状况。在这种情况下,数据库服务器的cpu消耗仅为2%左右(cpu是2*至强4核),内存占用1.8G(物理内存共有4G),大概平均每秒钟向数据库中插入40多条记录(三个表,包括游戏主从记录、利润记录等),还有数十次的select和update。另外,数据库中游戏记录表和利润记录这两个表的现有数据量都有1700万左右,当前数据库的总大小为37G。在如此的情况下运行,cpu是比较平稳的,内存也很平稳,但是每当运行了11到14个小时左右的时候,系统就会产生很多Insert的Timeout日志。为此,我将命令执行的超时由30s改成60s,问 阅读全文
posted @ 2008-11-05 11:09 zhuweisky 阅读(3203) 评论(11) 推荐(0) 编辑
摘要:对于SqlServer数据库,当有数据库连接建立时,会触发Audit login 事件;而当有某个数据库连接关闭时,将触发Audit logout 事件。一.Audit logout 的Duration值注意,在SQLSERVER的事件探查器中,我们通过观察可以发现,Audit login 和 匹配的Audit logout 事件使用的是同一个SPID,而且Audit logout 事件记录的StartTime正是Audit login事件产生的时间。有图为证: (大家请注意SPID为61的Login和Logout事件)所以,对于Audit logout 事件的记录的Duration字段的值的 阅读全文
posted @ 2008-10-28 14:00 zhuweisky 阅读(20490) 评论(4) 推荐(1) 编辑
摘要:对大多数大型系统而言,数据库往往是最容易出现瓶颈的地方,而通过使用恰当的缓存技术可以非常有效地减轻数据库的负载。将系统中用到的所有数据进行分类,分别对待不同种类的数据而不是一视同仁,有利于正确地做出缓存哪些数据、以及如何缓存的决策。 我通常将系统中用到的数据分为四类:恒定不变的数据,只发生增量的数据,偶尔改变的数据,经常改变的数据。(1)对于恒定不变的数据,采用普通的恒定缓存,即这种缓存在系统启动后初始化一次就不再改变了。(2)对于只发生增量的数据,采用智能式的增量缓存,如果所要的数据在这种缓存中不存在,则该缓存会从其它地方(如数据库)自动加载目标对象并缓存起来。(3)对于偶尔改变的(但不是. 阅读全文
posted @ 2008-06-27 20:00 zhuweisky 阅读(5057) 评论(17) 推荐(1) 编辑
摘要:如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复。 一、了解你用的工具 不要轻视这一点,这是我在这篇文章中讲述的最关键的一条。也许你也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server... 阅读全文
posted @ 2007-06-09 15:50 zhuweisky 阅读(2333) 评论(2) 推荐(3) 编辑
摘要:框架和类库等概念的出现都是源于人们对复用的渴望。“不要重复发明轮子”,成了软件界的一句经典名言。从最初的单个函数源代码的复用,到面向对象中类的复用(通常以类库的形式体现),再到基于组件编程中二进制组件(.NET中是以IL程序集形式存在的)的复用,人们复用软件的抽象层次越来越高。现在,框架复用是抽象层次的又一提升,框架的复用不仅仅是功能的复用,更是设计的复用。1.1 框架与类... 阅读全文
posted @ 2007-04-16 11:43 zhuweisky 阅读(5775) 评论(24) 推荐(3) 编辑
摘要:在我的架构经验小结(二)-- 关于三层架构 一文中,已经比较深入的介绍过三层架构方面的一些经验了,现在,我们来使用一个更小的比例尺来近距离观察我所理解的三层架构。 阅读全文
posted @ 2007-04-02 16:58 zhuweisky 阅读(14700) 评论(4) 推荐(6) 编辑
摘要:DataRabbit支持基于关系(Relation)和基于ORM的数据库操作,支持SqlServer,并且可以通过插件的方式提供对其它类型的数据库的支持。 阅读全文
posted @ 2007-03-19 16:36 zhuweisky 阅读(15809) 评论(39) 推荐(3) 编辑
摘要:复制整个SqlServer数据库的问题,复制的内容包括数据库大纲、数据库中的存储过程、函数、表结构、主外键关系以及表中的所有数据等,也就是说copy版本与原数据库一模一样。 阅读全文
posted @ 2007-03-19 11:45 zhuweisky 阅读(13715) 评论(14) 推荐(0) 编辑
摘要:在 我的架构经验小结(一)-- 常用的架构模型 一文中简单介绍了我常采用的几种架构模型,本文将稍微深入地介绍其中的一种 -- 三层架构模型。一.三层架构图 二.系统各层次职责1.UI(User Interface)层的职责是数据的展现和采集,数据采集的结果通常以Entity object提交给BL层处理。与UI平行的Service Interface层用于将业务发布为服务(如WebServi... 阅读全文
posted @ 2007-01-24 15:29 zhuweisky 阅读(8721) 评论(11) 推荐(2) 编辑
摘要:经过这几年的积累,在系统架构方面逐渐积累了一些自己的经验,到今天有必要对这些经验作个小结。在我的架构思维中,主要可以归类为三种架构模型:3/N层架构、“框架+插件”架构、地域分布式架构。 一.三种架构模型 1.3/N层架构 这是经典的多层架构模型,对于稍微复杂一点或特别复杂的系统,不使用分层架构是很难想象的。下图是经典的3层架构: 如今,凡是个程序员都能侃侃而谈... 阅读全文
posted @ 2006-12-23 09:36 zhuweisky 阅读(15233) 评论(16) 推荐(3) 编辑
摘要:框架为应用作过多的假设的一个非常具体的现象就是,框架越俎代庖,把本来是应用要做的事情揽过来自己做。这是一种典型的吃力不讨好的做法。框架越俎代庖,也许会使得一个应用的开发变得简单,却会给其它更多想使用该框架的应用增加了本没有必要的束缚和负担。 阅读全文
posted @ 2006-09-01 15:53 zhuweisky 阅读(7758) 评论(14) 推荐(2) 编辑
摘要:ESFramework的4层结构的4层分别是:客户端(Client)、应用服务器(AS)、功能服务器(FS)、数据库服务器。它们之间的联系图示意如下: FS (FunctionServer),功能服务器,处理并且仅处理所有的功能性请求,不参与用户管理、状态保持等,提供最纯粹的功能服务。 AS (A... 阅读全文
posted @ 2006-05-28 10:32 zhuweisky 阅读(11881) 评论(5) 推荐(1) 编辑