不同地区的网站

时间:2010-12-17 21:14:38

标签: c#

我得到了客户的要求。他们需要三个不同地区的博客网络应用程序。每个应用程序都有自己的数据和帖子。他们可能希望在这些应用程序之间共享用户信息。这些应用程序的用户界面将是相同的,除了css级别更改(颜色,字体和样式)和每个博客的主页中的一点位布局更改。这让我想到了很多问题。

三个单独的网站认可 1.为每个地区开发三个不同的网站并将它们部署在三个子域中是否合适? 2.我是否会为每个地区使用相同的数据库或个人数据库? 3.如果有三个网站,我将如何克服缓存,会话共享和用户登录(单点登录),多重部署,重复代码问题?

单一网站方法 1.创建一个站点,分隔像sitename / regionname这样的区域? 2.如果是单站点,性能和可扩展性将如何? 3.只需使用singe数据库,它将在三个区域之间共享。那是好方法吗?

可能还有更多可能性。现在我需要你指导所有其他未知问题会发生什么,我将如何逐一解决这个问题并得出最好的结论?

我们可以在C#中实现此解决方案。

编辑:网站将使用英语

5 个答案:

答案 0 :(得分:1)

我最近有类似的设计问题,所以让我与你分享我的方法(不管你认为它是错误的还是正确的!)。我选择了一个站点,单个数据库和主机头。

我做的第一件事就是创建一个域表。它看起来像这样:

_domains:

    _id INT IDENTITY NOT NULL
    _domain_name NVARCHAR(255) NOT NULL
    _id_category_root INT NOT NULL  (foreign key to _categories::_id)

这允许我为内容类别指定顶级域名。内容类别属于域。

_categories:

    _id INT IDENTITY NOT NULL
    _category_name NVARCHAR(64) NOT NULL
    _id_parent INT NULL (foreign key to _categories::_id)
    _theme_root NVARCHAR(64) NOT NULL

_theme_root字段指定了根目录中的默认主题文件夹。这允许每个类别(可选地)具有不同的css,并且如果需要,则允许具有不同的主页面。这允许内容类别看起来完全不同(CSS,图像和布局),甚至只使用默认母版页的CSS。

因此,内容属于一个类别:

    _id INT IDENTITY NOT NULL
    _id_category INT NOT NULL (foreign key to _categories::_id)
    _content_title
    -- other fields

我以这种方式抽象,因为您可以为同一类别级别拥有多个域:

    enGB.mysite.com  -> category 1
    www.enGB.mysite.com -> category 1
    frFR.mysite.com  -> category 2

在我的代码中,我查看主机标题并适当选择类别,提供内容和其他表格,这些表格分类了该类别表格。如果主机标头不匹配,我将返回默认值(英文网站)。

编辑:添加了关于主题的说明。

答案 1 :(得分:1)

你在这里有很多选择,所以你需要从客户那里获得一些好的信息。

您提到网站之间会有布局更改。这一部分就是说,用户界面的三个不同站点可能会更好。这可能是一个很好的假设,他们希望在个性化的基础上将UI更改为每个站点。将所有这些构建到单个引擎中很困难。

这三个人都可以共享一个数据库,你只需要确保每个帖子,配置文件等都有一个与之关联的SiteId。此外,您还需要确保您编写的每个查询都使用该SiteId值。这种情况称为多租户架构。

缓存将像处理单个站点的缓存一样处理。

在写完所有这些内容之后,我发现只需使用WordPress等现有产品或为您的目的创建模板就可以提供更好的服务。

答案 2 :(得分:0)

开发3个不同的网站并不好。维护将很快成为一场噩梦,代码将非常繁琐。

将其分解为面向服务(SOA)的面向服务的体系结构。这与语言无关。因此,如果您使用C#,PHP,Java或Python,那么一般的想法是相同的。

1。)创建用户服务以对用户进行身份验证。

2。)创建一个博客服务来处理存储,检索和编辑博客。

3。)创建一个站点以与服务进行通信并使用本地化。

使用服务还可以更改数据库设计,DBMS等,而无需更改核心应用程序。

在用户服务存储中使用某种本地标识符,以便您的单个站点可以根据本地化规则进行更改。所有主要语言都有本地化设置,可以为您完成大部分工作,例如日期格式,货币等......

注意:最好在用户注册期间获取区域名称 - 而不是登录。

与3个独立站点相比,上述设计使代码更易于维护。

答案 3 :(得分:0)

它应该是一个站点,它应该是一个单独的数据库。可扩展性是它自己的另一个问题。你期待什么样的流量?

无论如何,看看nvidia.com,这个网站是为世界各地的不同地区设置的。在大多数情况下,它仍然是相同的网站。某些部分可能托管在不同的国家/地区,但它们可能连接到同一个数据库或一组同步数据库。

另一个最重要的事情是,您希望所有网站完全相同但只是使用不同的语言吗?如果是这样,这只是简单的文本替换,或者您的数据库只是设置在您的应用程序可以轻松切换不同语言的内容的位置。

您的项目在规划阶段肯定需要大量时间。您需要确保确切地知道客户需要什么,因为这通常可能与他们想要的不同。为您的客户规划一些选项,并介绍这些选项的优缺点。然后让他们决定。

答案 4 :(得分:0)

可能有一个网站......并且使用该网站,您也可以使用不同的网址... 我的意思是说网站是单一的,所有用户都使用不同网址的网站,所以他们认为他们有自己的网站..但实际上只有一个网站.....一个数据库.... 它可能......以及它最好的方式.....