大话代码架构——书籍感想

版权声明:如果是原创,请联系作者进行转载 https://blog.csdn.net/u013159507/article/details/90271369

Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。

1. 架构是什么

每个项目都会使用多台服务器(Web服务器、数据库服务器、文件服务器......),如何针对对不同服务器选型,如何管理这些服务器,如何让这些服务器平稳运行,开发过程中使用的语言选型,数据库的选择,在编写代码的时候,是采用三层架构还是MVC,在写日志时,我们采用I/O读写文件、log4net或者是AOP切片来完成该操作。这些问题都需要架构师来解决。

架构分为硬架构软架构硬架构是关于硬件的架构。在开发初期,需分别购买服务器(文件服务器、数据库服务器、Web服务器),在当客户访问量达到一定的数量级时,可增加CDN(Content Delivery Network 内容分发网络)服务器加快访问速度。软架构即代码架构

本书主要是根据作者的电商网站进行内容扩展与讲解,分别从架构、NoSql数据库、测试、缓存、前端部分知识、高并发的处理进行讲解。

2. 三层结构

在开发过程中,如果前端、后端以及数据库等操作都是由一人完成,即不适用三层架构完成项目开发,则如果业务逻辑变动,就会出现“牵一发而动全身”的现象,由此不得不对整个项目进行修改。因此,分层架构可以让专业的层(Layer)去做专业的事,如果逻辑有变动,只需要修改响应的层就好。使用三层架构的原因主要有:为了高内聚,低耦合的思想 ;可以很容易的使用新的实现来替换原有层次的实现;实际开发中开发人员只关注整个结构中的某一层。

数据访问层(DAL)。只提供基本的数据访问。从数据源中加载数据,向数据源写入数据,从数据源删除数据。也具备访问其他数据库的能力。 
业务逻辑层(BLL)。负责处理业务逻辑,通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI。 
表示层(UI)。负责显示和采集用户操作。向用户展现特定的业务数据,采集用户的输入信息和操作。设计原则主要以用户为主。

3. 代码管理工具

目前常用的版本控制工具git和svn,各有各的优缺点,该如何选择呢?

3.1. SVN(Subversion)

SVN是Subversion的简称,目前是Apache项目底下的一个开放源代码的版本控制系统,它的设计目标就是取代CVS。

3.1.1. 优点

a. 集中式管理,管理方式在服务端配置好,客户端只需要同步提交即可,使用方便,操作简单,很容易就可以上手。

b. 在服务端统一控制好访问权限,利用代码的安全管理。

c. 所有的代码已服务端为准,代码一致性高。

3.1.2. 缺点

a. 所有操作都需要通过服务端进行同步,这会导致服务器性能要求比较高。如果服务器宕机了就无法提交代码了。

b. 分支管理不灵活,svn分支是一个完整的目录,且这个目录拥有完整的实际文件,这些操作都是在服务端进行同步的,不是本地                 化操作,如果要删除分支,也是需要将远程的分支进行删除,这会导致大家都得同步。

c. 需要联网。如果无法连接到SVN服务器,就无法提交自己的代码,更别说还原、对比等操作了。

3.2. Git

是一个开放源码的版本控制软件。与SVN最大的区别,就是分布式的管理

3.2.1. 优点

a. 分布式开发时,可以git clone克隆一个本地版本,然后在本地进行操作提交,本地可以完成一个完整的版本控制。在发布的时                  候,使用git push来推送到远程即可。

b. 冲突解决,多人开发很容易就会出现冲突,可以先pull远程到本地,然后在本地合并一下分支,解决好冲突,在push到远程即                  可。

c. 离线工作,如果git服务器出现问题,也可以在本地进行切换分支的操作,等联网后再提交、合并等操作。

3.2.2. 缺点

a. git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制。

b. 工作目录只能是整个目录,而svn可以单独checkout某个有权限的目录。

3.3. 总结

如果对访问控制、权限分配和代码安全性等要求比较高的,建议使用svn。如果是分布式,多人开发,版本迭代比较快的项目,建议使用git。

4. NoSql数据库

在书籍中,客户提出了这样一种需求:需要比Sql的读写效率高的数据库进行替换现有数据库。经过作者解读,用户的意思是:需要更高的读取速度。在系统实际应用中,用户80%都在进行查询操作,20%才是增、删、改。因此我们只需要使用户感觉查询比较快就可行。作者采用MongoDB数据库来解决此问题。MongoDB首先是一个数据库,可进行存储数据以及持久化;其次是非关系型数据库,其没有关系型数据库赖以成名的技术,如主外键、表关联等,因此MongoDB的读取速度非常快。

5. 软件测试

在项目开发过程中,每一个程序员都不可以保证其写的代码一定是正确的,针对此问题很多互联网企业聘请测试人员来进行测试,保证自己的代码质量以及项目质量。主要包含:单元测试、冒烟测试(正确流程测试)、黑盒测试、压力测试、安全测试、性能测试等。

6. 其他技术

6.1. 缓存

在项目投入使用时,由于系统用户在特定时间会有大量的查询操作,导致程序频繁访问数据库,导致数据库服务器的CPU急剧上升,使其无法正常运行。项目新手都会采用重启服务器来解决此问题,但是该方法不是长久之计。

系统网站展示的都是动态数据,都是来自数据库,当大量用户访问页面时,就会对数据库造成压力。

解决办法(缓存思想):我们可以把数据库查询的结果放到一个地方,当用户在访问时,不需要访问数据库直接读取返回。

在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用:CDN缓存; 反向代理缓存;  分布式Cache; 本地应用缓存;

  • 常用中间件:Varnish,Ngnix,Squid,MemcacheRedis,Ehcache等;
  • 缓存的内容:文件,数据,对象;
  • 缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)

6.2. 高并发处理

日后完善

 

 

 

猜你喜欢

转载自blog.csdn.net/u013159507/article/details/90271369
今日推荐