Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

项目开发历来就不是一个简单的问题。更难的问题是维护其余人开发的项目,而且要修改bug。若是原系统有重大问题还须要重构。html

怎么重构系统不是本文探讨的问题,可是重构后如何上线部署和本文关系密切。这个你们可能刚兴趣。前端

言归正传,如今演示一下若是作到部分版本和部分模块更新。程序员

 


 Asp.net Mvc模块化开发系列目录web

 一、 Asp.net MVc模块化开发之分区扩展框架(送源码)sql

 二、 Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”后端

 三、 Asp.net Mvc模块化开发之“逻辑(项目)复用”缓存

   3.一、 不一样角色或者权限的逻辑(项目)复用(分区过滤器的应用)服务器

   3.二、 不一样业务的逻辑(项目)复用(DI(依赖注入)的应用)数据结构

 四、 Asp.net Mvc模块化开发之“项目(分区)拆分”架构

 五、  Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

 


 1、如今假设一个系统架构

以上是一个简单站点的架构图
实际开发的是三个项目,blog(博客)、新闻(news)及评论(Coment)
    其中评论这个项目(分区)部署了两个,/Blog/Coment/和/News/Coment/

 

2、如今咱们有新的需求要对评论功能升级

一、咱们对评论功能拆分版本

     原版本: \Branchs\Coment_V1.0

     新版本: \Branchs\Coment_V1.1

二、好在咱们伟大的程序员效率就是高,三下五除二,新版本完成了,要部署了

  可是因为种种缘由,领导要求更新blog评论(/blog/Coment/),待blog评论上线一段时间稳定后再更新News评论,那咱们怎么办呢?

      而且要求若是新评论功能出现问题快速回退(要制定回退方案啊)

 

3、好吧,虽然需求有点"变态",咱们总不能说办不到吧

这里说个题外话,程序员这个偏执狂的群体是最不能忍受别人质疑本身能力的。其实程序员也是人,也不是万能的。适当的说办不到或者No也不是不能够。

直接上图:

 一、后端增长了一个站点(tmp.xxx.com)

      里面部署了一个分区/blog/Coment/

     注:这个站点是服务器内网站点,域名是没法外网直接访问的

 二、前端(Ngnix)配置一条rewrite规则并指向新站点的这个分区

  这样新的功能就顺利上线了,皆大欢喜,并且访问路径也没有变化,其余相关模块直接链接过来的也不须要修改。对度娘等搜索引擎更是没有任何影响。

     旧的站点(IIS)咱们没有作任何修改,原来是正常的如今不正常的可能性很是小,减少了上线的风险。

     有人可能会说,新评论功能修改了表结构,就算不更新源IIS站点,老的评论站点也可能挂掉。我只能说,你要这样蛮干我也没办法。

      这就要求写好的模块化代码,升级前考虑兼容原数据结构,不一样业务尽可能拆表。若是能够,升级时不要修改原表结构,而是新建一个表,上线前把历史数据导入到新表,彻底上线后再追一次增量数据。按本身团队的技术实力和产品需求,能作多少是多少。

三、回退怎么办?(回退方案)

     哈哈,这个更简单。只要从ngnix上删除新加的那条rewrite规则

     若是新版本程序和原来不是一个表,还须要追一下增量数据,固然提早要写好sql脚本,复杂一点的作一个控制台程序,通常就够了

四、有人可能会说,你这个不科学,修改博客评论极可能博客模块也需求修改

     确实,修改博客评论博客模块也可能须要修改上线

    继续上图:

    

   本图是局部图,原IIS站点部署仍是不变

五、有人说,咱们公司不用Ngnix,你这个要求过高了

     其实其余前端也都有rewrite功能,Apache等。

     有些没有前端就不太好办。可是前端真的是Web站点的标配。在前端上作日志、缓存、压缩、防御等。要想让web站点更好更快的运行,就须要让他作尽可能少(必不可少的业务处理)的事情。

六、有人说你这个仍是不够科学,咱们能够拆分为4个独立的IIS站点

  拆分为4个IIS站点是一个方案,也能够更好的隔离减小相互影响

     但这个前提是值得拆,好比性能达到瓶颈,单个业务(分区)流量太大,多个不一样团队交叉维护不一样的业务(分区)。

     要知道一我的维护一个站点和4个站点仍是不同的,相同的代码你须要部署到4个不一样的地方。现实中,咱们会开发无数能够产品(业务),有些产品的访问量很是小,可是却不能下线。为何小流量的产品不能下线不是本文探讨的范围,这里就不展开了。

     并且就算你拆分4个站点,升级版本直接覆盖原站风险仍是太大,要作平滑上线(方便回退)你还须要一倍的站点。

七、有人会说你这增长的tmp站点是什么鬼,是要永久存在吗?

     这里叫tmp只是举例用,现实中用其余名字也是能够的,升级版本所有上线后能够以这个站点为主站点(原站点成备用站点)或者切回到原站点均可以。

     这种用法能够叫作“AB版”,有的时候用的是A版,有的时候用的是B版,有的时候是AB版本共存(在维护文档中备注哪些功能在哪一个版本站点上)。

     若是需求冲突特别严重,再来个C版本或者D版本的临时站点又有什么不能够的呢?能解决现实问题才是最重要的。不能总等着你们来合并版本再一块儿上线。有的时候存在多个版本岂不是更加高效?

相关文章
相关标签/搜索