ram*_*ram 20 .net sql-server asp.net release-management
我在某个地方读到了(抱歉不记得来源)facebook周二发布了这个消息.他们首先向内部员工发布新功能,然后向一小部分外部用户发布,然后发布到整个世界.我相信谷歌也会做类似的事情
我主要使用Microsoft堆栈(TFS用于源代码控制,IIS,asp.net,带有大量数据的sql server).当然,面向公众的网站,所以他们必须24x7x365.虽然我可以设想只在其中一个服务器(在webfarm中)发布我的api/dll并测试它,如果有DB(存储的proc签名,表模式更改),我该怎么做呢?目前我们正在对SP进行版本控制(新的将是mySPNameV2,其中旧版本将是mySPNameV1 - 两者都采用不同的参数集,因此重命名)并且新的API将使用SP-V2,因为旧的API将继续使用SP -V1.
我看到一些设计气味,但还有更好的方法吗?
编辑:我们只将新代码发布到一个服务器并对其进行测试,难的是你将如何抽象(可能是抽象的不是正确的词,但你得到了这个想法)数据库模式从应用程序的多个并发版本发生了变化
在我的公司,我们几乎总是以交错的方式进行任何重大发布.我们通过为users表中的每个新功能添加一个标志来实现此目的.默认情况下,此标志设置为false; 当我们向更多用户推出该功能时,我们只需在数据库表中切换标志即可.
这意味着在应用程序级别,我们必须确保在所有地方检查此标志.代码推送到所有服务器.进行数据库更改; 但仍然只有一些用户看到了新功能.
在数据库级别,我们确保对SP的任何更改都是"向后兼容"的.这是通过遵循一些简单的规则来完成的:
至于API,我们的大多数参数都作为自定义对象(结构)传递.这样我们就可以向API方法添加一个新参数,并且仍然可以防止对API的现有调用中断.
此外,对于每个用户,我们存储他们正在使用的API版本.根据版本,用户会转到其他API网址.因此,基本上当用户进行第一次API调用进行身份验证时,我们会传递一个新的API URL(基于用户的API版本).对于所有后续调用,它们应该调用新URL.Salesforce.com也遵循此API进行API调用.
如果我理解正确的话,您想要的是拥有两种使用相同实时数据但不同 API 版本的机制。现在,假设您已经在使用双缓冲区机制,我猜您的实际问题是在转换期间使用活动表。
解决方案是让您的表同时包含 V1 和 V2 列(例如,一个用户表将包含来自两个 API 的字段)。注意:所有非公共字段都必须有默认值。
为了使其无缝工作,您应该为 V1 和 V2 创建视图,仅公开每个 API 版本的相关字段,并且您应该针对视图而不是表进行开发(类似于针对接口而不是实现进行开发的概念)。
存储过程也是如此 - 所有非通用参数都必须有默认值,等等......
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |