创建主要是C#的可扩展网站有哪些好的原则?对于基于C#的网站,哪些设计模式更常见?欢迎链接到好书或文章。
答案 0 :(得分:4)
我认为这些适用于所有网站,而不仅仅是C#
缩放在不同时间意味着不同的东西。您是否尝试在发布日从1000个beta用户扩展到100,000个活跃用户?你是否试图在没有重构的情况下处理持续增长?您是否只想确定您的网站上是否存在旧的“Slashdot”效果,您可以处理它吗?这些都需要可扩展性,但有些是非常不同的。
人们常常对数据丢失感到恐惧。但真正令人惊讶的是数据一致性。如果我在30秒前创建的帐户消失,我不会真的生气。如果我上传的布拉格之旅的照片被万圣节妓女用啤酒烟枪取代,我会生气。因此,如果您能够计算数据丢失的风险,那么它是一个相当简单的过程,然后计算影响,并做出一个真正的业务决策,确定它是否正常,如果是,在它伤害你之前多少。
我喜欢方块图,就像其他人一样,但有多少次你听到有人说“DAMN,这台电视很好设计我必须买它。”他们经常会说“索尼没有让我失望,这部电视看起来很棒,我必须拥有它!”保持简单和模块化,即使它意味着不使用一些非常酷,超抽象的无限可扩展模式,它将允许您随时随地扩展。
您的网站(以及任何业务)最难实现的部分始终是人。当然,当你需要更多的工程师时,你应该赚钱,这样你就可以雇佣10个人,他们会重写网站以便维护。但是,如果你只能雇用2,并且他们不会立即浏览每日wtf,将你的整个代码库发布在7部分曝光中......你应该提前出现。
答案 1 :(得分:2)
如果没有关于您的架构的更多详细信息,这很难回答。
您使用的是哪个版本的.NET和C#?
您使用的是MVC还是网络表单?
您是否有多个网络服务器连接到一个数据库?
在设计可扩展性的网站时,我首先要有很多将成为控制器的javascript,从Web服务中提取信息,无论是WCF应用程序还是.asmx服务。这样Web服务器就会提供页面,但之后渲染由javascript完成。这有助于缓解网络服务器上的压力。
如果您可以让Web服务器拥有所有静态内容,并且对于任何业务逻辑都要对将要执行处理的另一个服务器进行代码隐藏调用,请从数据库获取信息并返回到代码隐藏。
通过实现这种分离,如果您需要在一个层中添加更多服务器,您可以确定哪个部分需要额外的功能,并确保Web服务器只执行一项任务,与浏览器连接。
如果您可以详细了解您的架构,那将会有所帮助,以及您计划承担多少负载,那么提供更详细的响应会更容易。
答案 2 :(得分:2)
Martin Fowler的Patterns of Enterprise Application Architecture(summaries on his website)是一个很好的起点。有一些可怕的,可怕的组件和技术可用于构建可扩展的网站......负载平衡,缓存,应用程序服务,数据库设置,网络,以及正在编写的实际代码。