标签: architecture

Facebook架构

我一直在寻找有关Facebook架构的文章/信息,他们应对的挑战和方式.他们使用什么以及他们使用的原因.他们如何扩展以及他们做什么的设计决策等等.主要是学习的基础.了解处理如此大量流量的网站可以为建筑师提供大量指示,以便在设计新网站时牢记某些内容.我正在分享我发现的东西.

  1. Facebook科学与社交图(视频)
  2. 在Facebook上扩展
  3. Facebook聊天架构
  4. Facebook博客
  5. Facebook Cassandra建筑与设计
  6. Facebook工程笔记
  7. Quora - Facebook架构
  8. Facebook为600M用户
  9. Hadoop及其在Facebook上的使用
  10. Facebook上的Erlang:聊天架构
  11. Facebook性能缓存
  12. Facebook Connect架构

由于此网站的限制,我还有2个链接但无法发布.此外,请分享是否有任何更好的东西(不需要只与Facebook相关).

PS -我无法找到分享这项研究的好地方,因此这一举措.希望这有助于某人.

architecture facebook design-patterns

168
推荐指数
3
解决办法
10万
查看次数

如何版本控制数据库中的记录

假设我在数据库中有一条记录,管理员和普通用户都可以进行更新.

任何人都可以建议一个好的方法/架构如何版本控制此表中的每个更改,以便可以将记录回滚到以前的版本.

architecture database-design

158
推荐指数
8
解决办法
6万
查看次数

让构造函数返回Promise是不好的做法吗?

我正在尝试为博客平台创建一个构造函数,它内部有许多异步操作.这些包括从目录中获取帖子,解析它们,通过模板引擎发送它们等等.

所以我的问题是,让我的构造函数返回一个promise而不是它们调用的函数的对象是不明智的new.

例如:

var engine = new Engine({path: '/path/to/posts'}).then(function (eng) {
   // allow user to interact with the newly created engine object inside 'then'
   engine.showPostsOnOnePage();
});
Run Code Online (Sandbox Code Playgroud)

现在,用户可能还没有提供补充Promise链链接:

var engine = new Engine({path: '/path/to/posts'});

// ERROR
// engine will not be available as an Engine object here
Run Code Online (Sandbox Code Playgroud)

这可能会造成问题,因为用户可能会感到困惑,为什么 engine 在施工后无法使用.

在构造函数中使用Promise的原因是有道理的.我希望整个博客在构建阶段后正常运行.然而,在呼叫之后,它似乎几乎无法立即访问该对象new.

我一直在争论使用的东西,engine.start().then()或者engine.init()会返回Promise.但那些看起来也很臭.

编辑:这是在Node.js项目中.

javascript architecture constructor node.js promise

150
推荐指数
3
解决办法
4万
查看次数

如何创建灵活的插件架构?

我的开发工作中的一个重复主题是使用或创建内部插件架构.我已经看到它涉及多种方式 - 配置文件(XML,.conf等),继承框架,数据库信息,库等.在我的经验中:

  • 数据库不是存储配置信息的好地方,尤其是与数据混合在一起
  • 尝试使用继承层次结构需要了解要编码的插件,这意味着插件架构不是那么动态
  • 配置文件适用于提供简单信息,但无法处理更复杂的行为
  • 库似乎运行良好,但必须仔细创建单向依赖.

当我试图从我曾经使用过的各种架构中学习时,我也在寻求社区的建议.您是如何实现SOLID插件架构的?你最糟糕的失败是什么(或者你看到的最严重的失败)?如果要实现新的插件架构,您会怎么做?您使用过的SDK或开源项目是否具有良好架构的最佳示例?

我自己找到的几个例子:

这些例子似乎发挥了各种语言优势.一个好的插件架构是否必然与语言相关?最好使用工具来创建插件架构,还是在自己的以下模型上进行?

language-agnostic architecture plugins plugin-architecture

149
推荐指数
7
解决办法
6万
查看次数

标准委员会关心的异域架构

我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.

我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:

  • CHAR_BIT != 8
  • signed 不是两个补充(我听说Java有这个问题).
  • 浮点不符合IEEE 754(编辑:我的意思是"不是IEEE 754二进制编码").

我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.

所以问题是:哪些架构具有上述属性?

uint*_ts是可选的.

c c++ architecture

149
推荐指数
7
解决办法
1万
查看次数

AngularJS:了解设计模式

在AngularJS的负责人Igor Minar 的这篇文章的背景下:

MVC vs MVVM vs MVP.许多开发人员可以花费数小时和数小时进行辩论和争论,这是一个多么有争议的话题.

多年来,AngularJS更接近MVC(或者更确切地说是其客户端变体之一),但随着时间的推移,由于许多重构和api改进,它现在更接近MVVM - $ scope对象可以被认为是正在进行的ViewModel由我们称之为Controller的函数装饰.

能够对框架进行分类并将其放入MV*桶之一具有一些优势.它可以帮助开发人员更轻松地使用它的apis,从而更容易创建一个表示使用框架构建的应用程序的心理模型.它还可以帮助建立开发人员使用的术语.

话虽如此,我宁愿看到开发人员构建精心设计的kick-ass应用程序并遵循关注点分离,而不是看到他们浪费时间争论MV*废话.因此,我在此声明 AngularJSMVW框架 - 模型 - 视图 - 随便.无论什么代表" 对你有用的东西 ".

Angular为您提供了很大的灵活性,可以很好地将表示逻辑与业务逻辑和表示状态分开.请使用它来提高您的生产力和应用程序的可维护性,而不是热烈讨论那些在一天结束时无关紧要的事情.

在客户端应用程序中是否有任何关于实现AngularJS MVW(Model-View-Whatever)设计模式的建议或指南?

javascript architecture design-patterns client-side angularjs

147
推荐指数
3
解决办法
9万
查看次数

GraphQL和微服务架构

我试图了解GraphQL最适合在微服务架构中使用的位置.

关于只有1个GraphQL架构作为API网关代理对目标微服务的请求并强制其响应存在争议.微服务仍然会使用REST/Thrift协议进行通信思考.

另一种方法是每个微服务一个多个GraphQL模式.拥有一个较小的API网关服务器,使用请求的所有信息+ GraphQL查询将请求路由到目标微服务.

第一种方法

将1个GraphQL架构作为API网关将有一个缺点,每次更改微服务合同输入/输出时,我们必须在API网关侧相应地更改GraphQL架构.

第二种方法

如果每个微服务使用多个GraphQL模式,那么在某种程度上是有意义的,因为GraphQL强制执行模式定义,并且消费者需要尊重微服务给出的输入/输出.

问题

  • 在哪里可以找到适合设计微服务架构的GraphQL?

  • 您将如何使用可能的GraphQL实现设计API网关?

architecture microservices graphql

145
推荐指数
5
解决办法
3万
查看次数

描述用于Java Web应用程序的体系结构?

让我们分享基于Java的Web应用程序架构!

Web应用程序有许多不同的体系结构,这些体系结构将使用Java实现.这个问题的答案可以作为各种Web应用程序设计的库,各有利弊.虽然我意识到答案是主观的,但我们尽量做到客观,并激励我们列出的利弊.

使用您喜欢的详细程度来描述您的体系结构.为了使您的答案具有任何价值,您至少必须描述您所描述的架构中使用的主要技术和想法.最后但并非最不重要的是,我们何时应该使用您的架构?

我会开始......


架构概述

我们使用基于Sun的开放标准的3层架构,如Java EE,Java Persistence API,Servlet和Java Server Pages.

  • 坚持
  • 商业
  • 介绍

层之间可能的通信流程表示为:

Persistence <-> Business <-> Presentation
Run Code Online (Sandbox Code Playgroud)

例如,表示表示层从不调用或执行持久性操作,它始终通过业务层执行.该体系结构旨在满足高可用性Web应用程序的需求.

坚持

执行创建,读取,更新和删除(CRUD)持久性操作.在我们的例子中,我们使用(Java Persistence API)JPA,我们目前使用Hibernate作为持久性提供程序并使用其EntityManager.

该层分为多个类别,其中有某种类型的实体的每一类交易(涉及到购物车即实体可能是由一个单独的持久类得到处理),并使用一个且只有一个经理.

此外,该层还存储JPA实体,例如Account,ShoppingCart等等.

商业

与Web应用程序功能相关的所有逻辑都位于此层中.该功能可以为想要使用她/他的信用卡在线支付产品的客户启动汇款.它也可以创建新用户,删除用户或计算基于Web的游戏中的战斗结果.

该层分为多个类,每个类都注释@Stateless为成为无状态会话Bean(SLSB).每个SLSB都被称为管理器,例如,管理器可以是所提到的注释类AccountManager.

AccountManager需要执行CRUD操作时,它会对一个实例进行适当的调用,该实例AccountManagerPersistence是持久层中的一个类.两种方法的粗略草图AccountManager可能是:

...
public void makeExpiredAccountsInactive() {
    AccountManagerPersistence amp = new AccountManagerPersistence(...)
    // Calls persistence layer
    List<Account> …
Run Code Online (Sandbox Code Playgroud)

java architecture java-ee

143
推荐指数
4
解决办法
8万
查看次数

140
推荐指数
6
解决办法
4万
查看次数

服务应该总是返回DTO,还是它们还可以返回域模型?

我(重新)设计大规模应用程序,我们使用基于DDD的多层架构.

我们有MVC与数据层(存储库的实现),域层(域模型的定义和接口 - 存储库,服务,工作单元),服务层(服务的实现).到目前为止,我们使用跨所有层的域模型(主要是实体),并且我们仅将DTO用作视图模型(在控制器中,服务返回域模型,并且控制器创建视图模型,其被传递到视图).

我读过很多关于使用,而不是使用,映射和传递DTO的文章.我知道没有任何确定的答案,但我不确定是否可以将域模型从服务返回到控制器.如果我返回域模型,它仍然永远不会传递给视图,因为控制器总是创建特定于视图的视图模型 - 在这种情况下,它似乎是合法的.另一方面,当域模型离开业务层(服务层)时感觉不对.有时服务需要返回域中未定义的数据对象,然后我们要么必须将新对象添加到未映射的域,要么创建POCO对象(这很丑陋,因为有些服务返回域模型,有些有效地返回DTO).

问题是 - 如果我们严格使用视图模型,是否可以将域模型一直返回到控制器,或者我们是否应该始终使用DTO与服务层进行通信?如果是这样,根据需要的服务调整域模型是否可以?(坦率地说,我不这么认为,因为服务应该消耗域名所具有的.)如果我们应该严格遵守DTO,它们应该在服务层中定义吗?(我想是的.)有时很明显我们应该使用DTO(例如,当服务执行大量业务逻辑并创建新对象时),有时很明显我们应该只使用域模型(例如,当成员服务返回贫血用户时( s) - 创建与域模型相同的DTO似乎没有多大意义) - 但我更喜欢一致性和良好实践.

Article Domain vs DTO vs ViewModel - 如何以及何时使用它们?(以及其他一些文章)与我的问题非常相似,但它没有回答这个问题.文章我应该用EF在存储库模式中实现DTO吗?也是类似的,但它不涉及DDD.

免责声明:我不打算只使用任何设计模式,因为它存在且很花哨,另一方面,我也想使用良好的设计模式和实践,因为它有助于设计整个应用程序,有助于分离至少在目前,即使是使用特定模式进行处理也不是"必要的".

一如既往,谢谢.

architecture asp.net-mvc domain-driven-design entity-framework

138
推荐指数
7
解决办法
4万
查看次数