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

项目开发从来就不是一个简单的问题。更难的问题是维护其他人开发的项目,并且要修改bug。如果原系统有重大问题还需要重构。

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

言归正传,现在演示一下如果做到部分版本和部分模块更新。



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

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

2、 Asp.net模块化开发之“开启分模块开发简单愉快之旅”

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

3.1、 不同角色或者权限的逻辑(项目)复用(分区过滤器的应用)

3.2、 不同业务的逻辑(项目)复用(DI(依赖注入)的应用)

4、 Asp.net模块化开发之“项目(分区)拆分”

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



一、现在假设一个系统架构

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

二、现在我们有新的需求要对评论功能升级

1、我们对评论功能拆分版本

原版本: \Branchs\Coment_V1.0

新版本: \Branchs\Coment_V1.1

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

  但是由于种种原因,领导更新blog评论(/blog/Coment/),待blog评论上线一段时间稳定后再更新News评论,那我们怎么办呢?

并且要我们给出如果新评论功能出现问题需要快速回退(要制定回退方案啊)

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

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

直接上图:

1、后端增加一个一个站点(tmp.xxx.com)

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

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

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

旧的站点(IIS)我们没有做任何修改,原来是正常的现在不正常的可能性非常小,减小了上线的风险。

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

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

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

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

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

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

继续上图:

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

5、有人说,我们公司不用Ngnix,你这个要求太高了

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

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

6、有人说你这个还是不够科学,我们可以拆分为4个独立的IIS站点

  拆分为4个IIS站点是一个方案,可以更好的隔离减少相互影响

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

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

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

这里叫tmp只是举例用,现实中用其他名字也是可以的,临时版本全部合并后可以把所有最新版本更新到这个站点或者和回到原站点都可以。

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

如果需求冲突特别严重,再来个C版本或者D版本的临时站点又有什么不可以的呢?能解决现实问题才是最重要的。不能总等着大家来合并版本再一起上线。很多更新适当存在多个版本是不是更加高效呢?

时间: 2024-10-13 20:51:46

Asp.net模块化开发之“部分版本部分模块更新(上线)”的相关文章

Maven模块化开发

最近在做一个项目,这个项目有个特点,含有众多业务模块,各业务模块间关联内容很少,且公司领导又想达到各模块可快速单独拆分使用的效果(说白了就是公司没钱,想把这个项目做完后,做下拆分,拆分成各个小产品单独销售),于是乎我想到是否可使用Maven来进行模块化开发,将各个业务模块做成一个个小的Jar包,到用的时候需要那个加载那个. 一,构想: 把系统分成以下几个模块(项目名称proj): 1,proj模块,作为父模块用于聚合所有子模块,打包方式pom 2,proj-web模块,用于发布最终的war包,打

ASP.NET MVC模块化开发——动态挂载外部项目

原文:ASP.NET MVC模块化开发--动态挂载外部项目 最近在开发一个MVC框架,开发过程中考虑到以后开发依托于框架的项目,为了框架的维护更新升级,代码肯定要和具体的业务工程分割开来,所以需要解决业务工程挂载在框架工程的问题,MVC与传统的ASP.NET不同,WebForm项目只需要挂在虚拟目录拷贝dll就可以访问,但是MVC不可能去引用工程项目的dll重新编译,从而产生了开发一个动态挂在MVC项目功能的想法,MVC项目挂载主要有几个问题,接下来进行详细的分析与完成解决方案 一般动态加载dl

asp.net 分布式应用开发

Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案.其中,基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点,结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档),在.Net下开发N层应用程序也不再困难. 一.分布式处理概述 分布式处理是将应用程序逻辑分布到2台或者更多台计算机上,在物理上或逻辑上分离的单元中.这一概念并不是新生事物,在大型工程已经得到广泛使用.只不过,Inter

UC前端‘搭积木’的模块化开发——scrat.js

模块化开发 将模块所需的js\css\img\tmpl维护在一起,一个模块一个目录 js渲染模板 css只关心模块内样式 开发团队心声:"我们希望每次研发新产品不是从零开始,不同团队不同项目之间能有可复用的模块沉淀下来." 模块生态 每个工程有_工程模块_和_生态模块_. 生态模块:基于_component规范_开发,部署到Github上,可以通过命令行工具将Github上的模块安装到工程中使用.比如:jQuery, iscroll, zepto.js, vue.js 安装命令: sc

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

前端模块化开发的价值

本文发表在<程序员>杂志 2013 年 3 月刊,推荐购买. 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂.本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发. 恼人的命名冲突 我们从一个简单的习惯出发.我做项目时,常常会将一些通用的.底层的功能抽象出来,独立成一个个函数,比如 function each(arr) { // 实现代码 } function log(str) { // 实现代码 } 并像模像样地把这些函

软件开发中,什么是模块化开发?

软件产品可以被看作是由一系列具有特定功能的组件组成,作为一个完整的系统也可以被分解成一系列功能模块,这些模块之间的相互作用就形成了系统的所有功能. 所谓模块是指可组成系统的.具有某种确定独立功能的半自律性的子系统,可以通过标准的界面和其他同样的子系统按照一定的规则相互联系而构成的更加复杂的系统.每个模块的研发和改进都独立于其他模块的研发和改进,每个模块所特有的信息处理过程都被包含在模块的内部,如同一个"黑箱",但是有一个或数个通用的标准界面与系统或其他模块相互连接. 在软件的模块化开发

ASP.NET Core开发-读取配置文件Configuration

ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML配置文件web.config. 新的配置系统支持多种格式的配置文件. 下面我们来以json 格式的配置文件正式开始学习. 我们新建一个ASP.NET Core Web 应用程序,选择无身份验证. 读取配置文件 在项目目录下有个 appsettings.json ,我们先来操作这个文件. 在appse

.NET基础 (21)ASP NET应用开发

ASP.NET中的WebForm相关的内容其实有点儿过时了,但在很多的老项目中还是WebForm的,这些都是遗留问题,新上的项目基本上都用MVC了,在微软最新的 ASP.NET 的版本中已经默认使用MVC了.参考ASP.NET 5简介 ASP NET应用开发基础1 请解释ASP NET以什么形式运行2 常见的HTTP Code有哪些3 GET请求和POST请求有何区别4 介绍ASP NET的页面生存周期 控件和页面1 什么是静态页面,什么是动态页面2 请简述ViewState的功能和实现机制3