1、系统架构设计《架构之路的反思开篇》

     很多年不曾更改网名——半个鼠标,原因是软件路上永远没有终点,永远只能走一半。

    曾经的工作经历就简单过一下了。做项目负责是从12年开始,12年在文思创新担任国泰航空CHJ项目的项目经理;后面去上海创业失败,在上海天翼翼支付项目做了一个月不喜欢上海的气氛回到深圳,然后在佰钧城做华为的技术顾问,做的是华为w3部门下的hwa大数据挖掘项目;15年为了回归电商行业,回到走秀网做架构,现离职在外溜达溜达。

      我喜欢做产品设计,很多时候都是在给自己做,因为经常性的搞互联网产品创业,现在也是在溜达,现在比较自由无人管,吃饭经常靠蹭饭...

     每天都比较忙碌,今天快过年了,刚好能休息下总结了以前走过的路,记录起来,打算10年后再看。

  我个人的感觉:

 1、以前很多时候就感觉把功能实现了产品就设计好了,很多人都会跳入这个误区。其实很多时候我们在企业真的就是在做实施,也就是coding,3,5年后会开始接触项目的解决方案,但也仅仅只是某一块的解决方案,没有真正的对把控过整个项目。

  2、其实很多企业的产品设计都是有很多问题的,可能来源多种方面,我们也能理解:

   a、问题的来源公司对于项目的态度(比如公司管理层面的不重视)。

   b、核心负责人员的流动与变更(经常变更会导致项目问题越来越多,历史累计,导致项目重构的风险与成本更大)。

   c、一开始就规划设计有问题等多方面的问题。

   。。。

  3、现在很多的程序员及项目经理,一直在从事的是业务的实施,并不算架构,这种事情很多人都能做;哪怕真的不能做,按照上一辈人的代码抄写跟着写就ok了,所以缺少对架构的认识,不是大家都不想去弄,很多时候都是因为没有机会给你去弄。项目太小,公司在服务器等环境上都给予不了测试;项目太大,不会随便让你搞测试;项目太久,你压根不敢乱动,所以大家就缺少了架构的学习与成长。我身边一堆这样的人。

  学习架构,要先认知行业的项目类型:(1、单应用项目。2、分布式应用项目)

 一、单应用项目:

特征:

1、项目就一台服务器,根本不曾考虑分布式缓存,分布式部署,数据库负载(有可能有些单应用也用到了,比如试用阿里云RDS,但那不是我们搭建的服务,而是阿里云提供的现成的服务,所以可以说不算。真正的数据库负载也是有分布式集群的,也是有主从的。)。

2、只能应用一些中小型企业,有的时候连中型都算不上。

3、项目重业务实施,说白一点就是开发功能为主,不管性能不管优化,先实现再说。

只列三点吧,单应用项目现在在社会中的组成比重是很大的,往往都是在中小型企业,我们不能说这种设计不对,只能说存在就有道理。这种单应用项目开发、维护、部署、运维、硬件支持配置皆很低,所以很适合中小型企业,所以也就造就了很多单应用项目的存在。

二、分布式应用项目:

特征:

1、适用在中大型企业,往往适用在应用服务并发大,请求频繁快,数据量暴增的项目中。

2、一台机器根本支撑不住业务的项目的正常运作,项目部署多台机器。

3、项目规模大,代码拆分,配置多等等特征。

4、开发、上线、维护、运维、数据维护是常用的特征。

只列举几点了,这种项目的设计是否合理,就是真正考验架构师水平的,当然每个人架构都有他的考虑与现实问题,并不是所有的想法都会被公司所采纳,不考虑从公司层面出发,只从架构设计上,我觉得我们需要认识一些设计方面需要知道的一些解决方案。


架构设计需要考虑:我这里指的都是分布式应用项目的设计,单应用项目的设计直接排除了。


1、项目的权限安全是否认知了,这里是项目的大门,有句话叫做不怕贼偷就怕贼惦记。现在行业中常见的应用解决权限安全的有shiro 与Spring Security,如何使用建议先阅读下:

http://www.cnblogs.com/aoeiuv/p/5868128.html


2、项目的session会话管理要知道,很多分布式的项目是一定要对session会话要有认证的,比如一个淘宝网旗下有很多子项目,比如支付宝,聚划算,天天特价,阿里巴巴等等,不同的子项目由不同的部门管理,那就需要对单点登录有一定的认知。这里可以采用spring-session,先认识一个列子http://blog.csdn.net/you8626/article/details/46877211,例子不一定全部看明白,知道session跟分布式缓存搭配用,比如spring-session跟redis的搭配,知道redis清除key缓存应用全部能得到刷新,就知道单点登录的原理了,当然要先认识redis分布式缓存。


3、redis分布式缓存如何解决。缓存是什么,还记得我们单应用中的缓存常见的放到pagecontent,request,session,application中用于保存我们的数据吗,这就是缓存,只是这种缓存是由你的应用服务器提供(比如tomcat,jboss),那这个存储是有限的。那redis到底是什么,redis其实说白一点是一个k-value的数据库,属于nosql家族,但是现在很多开源上提供了很多分布式缓存方案。这里我提供cachecloud,它能帮助你搭建好redis,还提供了对redis的服务管控与监听服务。

如果还是对redis不明白的可以看看视频:http://my.tv.sohu.com/pl/9100280/82857544.shtml


4、dubbo与zookepper的认知,先说zookepper是什么,他是一种分布式应用程序协调服务,说白一点就是他能给你搭载分布式应用集群,他能给你搭建主从应用并管制你的应用;网络上面还有很多专家写的,但很多都是翻译过来的,比较难懂,我更喜欢按照自己的理解去解释。dubbo又是什么,说直接一点就是你的项目中引入dubbo支持后,就可以让你的应用跟zookepper保持一种联系,比如注册与订阅。那什么是注册,你那个应用需要做成集群管控,你就在哪个项目中把dubbo配置,把zookepper也配置好,这就是注册,这样你的接口或者服务就被zookepper管控了,很直白了吧。那什么是订阅,就是说你项目中需要用到哪个接口调用,你同样配置好,就能问zookepper调用,如果还是不懂,

请查看http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53

看免费的,不用看完,看前面几篇理解

5、项目设计,最好建议要知道一个好的项目往往分很多应用调用,比如原生app调用,微信html5web项目的调用,pc-web项目的调用,其他的有业务往来的项目的调用,或者被第三方公司的调用等等这些,都可能会出现重用,如果项目设计不规范,会导致你很多地方做重复的事情。所以要重视项目的代码分模块进行,模块就会有公共基础模块,接口标准模块,接口实现模块,web模块等,要明白哪些地方该做成服务,哪些地方不需要,如果实在不行,都做成服务管控最好,免得以后回来重构业务。而这些服务都采用dubbo与zookepper做成注册与订阅的,这样这些服务就得到了服务管控,未来通过控制面板或者等其他的解决方案能对服务进行管理,这种就叫服务治理,是一种sop,可以理解为一种设计思想。不懂的百度,我不喜欢按照原文翻译。


6、知道dubbo的监控,知道zookepper的监控,redis的监控也是架构设计的人需要的,架构的设计者想要驾驭产品,没有这些监控你自己都不知道项目啥时候挂,所以这些很关键。

还有很多其他的东西,就先不全部列举了,我认为这些都是需要重视的,其他的很多人都懂。


后面有时间在细说这些如何学习跟理解。不过照我文章上面的一个个看懂,应该对架构就基本有一个认知了,可能就是实践了,实践可能需要你自己搭载cachecloud(redis包含了,不需要单独去安装,除非你的redis版本你想换掉),zookepper了,如果还需要监控,可以找其他的更好的监控管理软件。


其他说明:

如果你是刚刚加入到软件行业中的同志们,可以过一遍就好,不要当真,先把单应用项目功底打扎实了!

如果你是已经入行3年的同志们,这个文章开始变得有价值,关键是读完了没有。

如果你已经是项目经理或者架构的同志们,这文章及文章上的一些链接地址,相信一定帮助到你们了,希望你们能更好的驾驭分布式应用项目的设计。

以后有时间在慢慢交流了。

你可能感兴趣的:(架构认知)