我一直在寻找有关Facebook架构的文章/信息,他们应对的挑战和方式.他们使用什么以及他们使用的原因.他们如何扩展以及他们做什么的设计决策等等.主要是学习的基础.了解处理如此大量流量的网站可以为建筑师提供大量指示,以便在设计新网站时牢记某些内容.我正在分享我发现的东西.
由于此网站的限制,我还有2个链接但无法发布.此外,请分享是否有任何更好的东西(不需要只与Facebook相关).
PS -我无法找到分享这项研究的好地方,因此这一举措.希望这有助于某人.
假设我在数据库中有一条记录,管理员和普通用户都可以进行更新.
任何人都可以建议一个好的方法/架构如何版本控制此表中的每个更改,以便可以将记录回滚到以前的版本.
我正在尝试为博客平台创建一个构造函数,它内部有许多异步操作.这些包括从目录中获取帖子,解析它们,通过模板引擎发送它们等等.
所以我的问题是,让我的构造函数返回一个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项目中.
我的开发工作中的一个重复主题是使用或创建内部插件架构.我已经看到它涉及多种方式 - 配置文件(XML,.conf等),继承框架,数据库信息,库等.在我的经验中:
当我试图从我曾经使用过的各种架构中学习时,我也在寻求社区的建议.您是如何实现SOLID插件架构的?你最糟糕的失败是什么(或者你看到的最严重的失败)?如果要实现新的插件架构,您会怎么做?您使用过的SDK或开源项目是否具有良好架构的最佳示例?
我自己找到的几个例子:
这些例子似乎发挥了各种语言优势.一个好的插件架构是否必然与语言相关?最好使用工具来创建插件架构,还是在自己的以下模型上进行?
我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.
我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:
CHAR_BIT != 8signed 不是两个补充(我听说Java有这个问题).我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型†.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.
所以问题是:哪些架构具有上述属性?
† uint*_ts是可选的.
在AngularJS的负责人Igor Minar 的这篇文章的背景下:
MVC vs MVVM vs MVP.许多开发人员可以花费数小时和数小时进行辩论和争论,这是一个多么有争议的话题.
多年来,AngularJS更接近MVC(或者更确切地说是其客户端变体之一),但随着时间的推移,由于许多重构和api改进,它现在更接近MVVM - $ scope对象可以被认为是正在进行的ViewModel由我们称之为Controller的函数装饰.
能够对框架进行分类并将其放入MV*桶之一具有一些优势.它可以帮助开发人员更轻松地使用它的apis,从而更容易创建一个表示使用框架构建的应用程序的心理模型.它还可以帮助建立开发人员使用的术语.
话虽如此,我宁愿看到开发人员构建精心设计的kick-ass应用程序并遵循关注点分离,而不是看到他们浪费时间争论MV*废话.因此,我在此声明 AngularJS是MVW框架 - 模型 - 视图 - 随便.无论什么代表" 对你有用的东西 ".
Angular为您提供了很大的灵活性,可以很好地将表示逻辑与业务逻辑和表示状态分开.请使用它来提高您的生产力和应用程序的可维护性,而不是热烈讨论那些在一天结束时无关紧要的事情.
在客户端应用程序中是否有任何关于实现AngularJS MVW(Model-View-Whatever)设计模式的建议或指南?
javascript architecture design-patterns client-side angularjs
我试图了解GraphQL最适合在微服务架构中使用的位置.
关于只有1个GraphQL架构作为API网关代理对目标微服务的请求并强制其响应存在争议.微服务仍然会使用REST/Thrift协议进行通信思考.
另一种方法是每个微服务一个多个GraphQL模式.拥有一个较小的API网关服务器,使用请求的所有信息+ GraphQL查询将请求路由到目标微服务.
第一种方法
将1个GraphQL架构作为API网关将有一个缺点,每次更改微服务合同输入/输出时,我们必须在API网关侧相应地更改GraphQL架构.
第二种方法
如果每个微服务使用多个GraphQL模式,那么在某种程度上是有意义的,因为GraphQL强制执行模式定义,并且消费者需要尊重微服务给出的输入/输出.
问题
在哪里可以找到适合设计微服务架构的GraphQL?
您将如何使用可能的GraphQL实现设计API网关?
让我们分享基于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) "coroutine"和"thread"之间有什么区别?
我(重新)设计大规模应用程序,我们使用基于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
architecture ×10
javascript ×2
angularjs ×1
asp.net-mvc ×1
c ×1
c++ ×1
client-side ×1
constructor ×1
coroutine ×1
facebook ×1
graphql ×1
java ×1
java-ee ×1
node.js ×1
plugins ×1
promise ×1
system ×1