Questions tagged «architecture»

体系结构包含解决方案的流程,工件和高级结构。


10
GraphQL和微服务架构
我试图了解GraphQL在微服务体系结构中最适合使用的地方。 关于仅使用1个GraphQL模式作为API网关将请求代理到目标微服务并强制其响应的问题,存在一些争论。微服务仍将使用REST / Thrift协议进行通信。 相反,另一种方法是每个微服务具有多个GraphQL模式。拥有一个较小的API网关服务器,该服务器使用请求的所有信息+ GraphQL查询将请求路由到目标微服务。 第一种方法 具有1个GraphQL架构作为API网关将具有一个缺点,即每次您更改微服务合同的输入/输出时,我们都必须在API网关侧相应地更改GraphQL架构。 第二种方法 如果每个微服务使用多个GraphQL架构,则以某种方式有意义,因为GraphQL会强制执行架构定义,并且使用者将需要尊重微服务提供的输入/输出。 问题 您是否认为GraphQL适合设计微服务架构? 您如何设计具有可能的GraphQL实现的API网关?


9
服务应该总是返回DTO,还是可以返回域模型?
我正在(重新)设计大型应用程序,我们使用基于DDD的多层体系结构。 我们的MVC具有数据层(存储库的实现),域层(域模型和接口的定义-存储库,服务,工作单元),服务层(服务的实现)。到目前为止,我们在所有层上都使用域模型(主要是实体),并且仅将DTO用作视图模型(在控制器中,服务返回域模型,并且控制器创建视图模型,该模型传递给视图)。 我读了无数关于使用,不使用,映射和传递DTO的文章。我知道没有明确的答案,但是我不确定是否可以将域模型从服务返回到控制器。如果我返回域模型,它仍然永远不会传递给视图,因为控制器始终会创建特定于视图的视图模型-在这种情况下,它似乎合法。另一方面,当域模型离开业务层(服务层)时,感觉不对。有时服务需要返回域中未定义的数据对象,然后我们必须向未映射的域中添加新对象,或者创建POCO对象(这很丑陋,因为某些服务返回域模型,因此某些服务有效地返回DTO)。 问题是-如果我们严格使用视图模型,是否可以将域模型一直返回给控制器,还是应该始终使用DTO与服务层进行通信?如果是这样,可以根据需要的服务来调整域模型吗?(坦率地说,我不这么认为,因为服务应该使用哪个域。)如果我们严格遵守DTO,是否应该在服务层中定义它们?(我是这样认为的。)有时候,很明显我们应该使用DTO(例如,当服务执行大量业务逻辑并创建新对象时),有时很显然,我们应该仅使用域模型(例如,当Membership服务返回贫乏的User( s)-创建与域模型相同的DTO似乎没有多大意义)-但我更喜欢一致性和良好做法。 Article Domain与DTO与ViewModel-如何以及何时使用它们?(以及其他一些文章)与我的问题非常相似,但是并不能回答这个问题。第二条我应该实现与EF存储库模式的DTO?也很相似,但不涉及DDD。 免责声明:我不打算仅仅因为它存在并且很花哨就使用任何设计模式,另一方面,我也想使用好的设计模式和实践,因为它有助于整体上设计应用程序,有助于分离的担忧,至少在目前,甚至不需要使用特定的模式。 与往常一样,谢谢。

3
Facebook架构[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊不清,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我一直在寻找有关Facebook架构,它们所面临的挑战和方式的文章/信息。他们使用什么以及为什么使用。他们如何扩展规模以及他们做什么的设计决策等。主要的基础是学习。了解处理大量流量的站点可以为架构师等提供很多指导,以便在设计新站点时牢记某些内容。我正在分享我的发现。 Facebook科学与社交图谱(视频) 在Facebook上扩展 Facebook聊天架构 Facebook博客 Facebook Cassandra建筑与设计 Facebook工程说明 Quora-Facebook体系结构 适用于6亿用户的Facebook Hadoop及其在Facebook上的使用 Facebook上的Erlang:聊天架构 Facebook性能缓存 Facebook Connect架构 我还有2个链接,但由于此站点的限制而无法发布。另外,如果有人有更好的东西,请分享(不需要仅与Facebook相关)。 PS-我找不到合适的地方分享这项研究,因此就没有这项计划了。希望这对某人有帮助。

7
标准委员会关注的异国架构
我知道C和C ++标准留下了语言实现定义的许多方面,只是因为如果存在具有其他特征的体系结构,那么将很难或不可能为其编写符合标准的编译器。 我知道40年前,任何计算机都有其自己的独特规范。但是,我不知道今天使用的任何架构在哪里: CHAR_BIT != 8 signed 不是两个的补码(我听说Java对此有问题)。 浮点不符合IEEE 754(编辑:我的意思是“不是采用IEEE 754二进制编码”)。 我问的原因是,我经常向人们解释,C ++不要求其他任何低级方面(例如固定大小的类型†)是很好的。很好,因为与“其他语言”不同,它可以使您的代码在正确使用时可移植(编辑:因为可以将其移植到更多体系结构中,而无需模拟机器的低级方面,例如,符号+幅值体系中的二进制补码算法) 。但是我很难为自己不能指出任何特定的体系结构。 所以问题是:哪些架构具有上述特性? † uint*_t是可选的。
154 c++  c  architecture 

9
如何创建灵活的插件架构?
在我的开发工作中,重复的主题是内部插件体系结构的使用或创建。我已经看到它采用了多种方法-配置文件(XML,.conf等),继承框架,数据库信息,库等。在我的经验中: 数据库不是存储您的配置信息的好地方,尤其是与数据混合在一起的地方 尝试使用继承层次结构进行此操作需要了解有关要编码的插件的知识,这意味着插件体系结构并不是那么动态 配置文件可以很好地提供简单的信息,但不能处理更复杂的行为 库似乎运行良好,但是必须仔细创建单向依赖关系。 当我寻求与我合作过的各种体系结构学习时,我也在寻求社区的建议。您如何实现SOLID插件架构?您最严重的失败是什么(或您所见过的最严重的失败)?如果要实现新的插件体系结构,该怎么办?您所使用的哪个SDK或开源项目具有良好架构的最佳示例? 我自己发现了一些示例: Perl的Module :: Plugable和IOC,用于在Perl中进行依赖注入 用于依赖项注入的各种Spring框架(Java,.NET,Python)。 一个带有Java列表的SO问题(包括Service Provider Interfaces) 一个SO问题的C ++指向布斯博士的文章 有关ASP.NET MVC特定插件概念的SO问题 这些示例似乎发挥了各种语言优势。好的插件架构是否必然与该语言相关?最好是使用工具来创建插件体系结构,还是在自己的以下模型上进行构建?

5
AngularJS:了解设计模式
在AngularJS负责人Igor Minar 的这篇文章中: MVC vs MVVM vs MVP。许多开发人员可能花费数小时来辩论和争论,这是一个有争议的话题。 几年来,AngularJS更加接近于MVC(或其客户端变体之一),但是随着时间的流逝,由于许多重构和api的改进,它现在更加接近MVVM – $ scope对象可以被认为是正在被开发的ViewModel。由我们称为Controller的函数修饰。 能够对框架进行分类并将其放入MV *存储桶之一具有一些优势。通过使创建代表使用框架构建的应用程序的思维模型更容易,它可以帮助开发人员更熟悉其api。它还可以帮助建立开发人员使用的术语。 话虽如此,我宁愿看到开发人员构建精心设计并遵循关注点分离的踢屁股应用程序,而不希望他们浪费时间争论MV *废话。出于这个原因,我特此声明 AngularJS为MVW框架-Model-View-Whatever。凡代表什么“ 对您有用 ”。 Angular为您提供了很大的灵活性,可以很好地将表示逻辑与业务逻辑和表示状态分开。请使用它来提高您的生产力和应用程序可维护性,而不必热烈讨论最后没什么大不了的事情。 在客户端应用程序中实现AngularJS MVW(模型-视图-任何)设计模式是否有任何建议或准则?

10
描述您用于Java Web应用程序的体系结构?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 让我们分享基于Java的Web应用程序体系结构! Web应用程序有许多不同的体系结构,这些体系结构将使用Java来实现。这个问题的答案可以用作各种Web应用程序设计的库,各有其优缺点。虽然我意识到答案将是主观的,但让我们尝试尽可能客观,并激发我们列出的利弊。 使用您喜欢的详细信息级别来描述您的体系结构。为了使您的答案具有任何价值,您至少必须描述所描述的体系结构中使用的主要技术和思想。最后但并非最不重要的一点,我们什么时候应该使用您的体系结构? 我开始... 体系结构概述 我们使用基于Sun的开放标准(如Java EE,Java Persistence API,Servlet和Java Server Pages)的三层体系结构。 坚持不懈 商业 介绍 层之间可能的通信流由以下方式表示: Persistence <-> Business <-> Presentation 例如,这意味着表示层从不调用或执行持久性操作,而是始终通过业务层进行操作。该体系结构旨在满足高可用性Web应用程序的需求。 坚持不懈 执行创建,读取,更新和删除(CRUD)持久性操作。在本例中,我们正在使用(Java Persistence API)JPA,并且当前使用Hibernate作为持久性提供程序,并使用其EntityManager。 该层分为多个类别,其中有某种类型的实体的每一类交易(涉及到购物车即实体可能是由一个单独的持久类得到处理),并使用一个且只有一个经理。 此外,该层还存储JPA实体哪些是喜欢的东西Account,ShoppingCart等等。 商业 与Web应用程序功能相关的所有逻辑均位于此层。此功能可能是为希望使用其信用卡在线购买产品的客户启动汇款。也可能是在基于网络的游戏中创建新用户,删除用户或计算战斗结果。 该层分为多个类,每个类都带有注释,@Stateless以成为无状态会话Bean(SLSB)。每个SLSB都称为管理器,例如,管理器可以是注释为的类,称为AccountManager。 当AccountManager需要执行CRUD操作时,它将对实例进行适当的调用,该实例AccountManagerPersistence是持久层中的类。两种方法的大致草图AccountManager可能是: ... public void makeExpiredAccountsInactive() { AccountManagerPersistence amp = new AccountManagerPersistence(...) // Calls persistence layer List<Account> …


4
微服务认证策略
我很难为微服务架构选择一种体面/安全的身份验证策略。我在该主题上找到的唯一SO帖子是:Microservice Architecture中的单点登录 我的想法是在每个服务(例如身份验证,消息传递,通知,配置文件等)中具有对每个用户的唯一引用(从逻辑上说,然后是其用户user_id),并具有id在登录时获得当前用户的可能性。 从我的研究中,我发现有两种可能的策略: 1.共享架构 在这种策略中,身份验证应用是其中一项服务。但是每个服务都必须能够进行转换session_id=>,user_id因此必须非常简单。这就是为什么我想到Redis时会存储key:value的原因session_id:user_id。 2.防火墙架构 在此策略中,会话存储并不重要,因为它仅由身份验证应用处理。然后,user_id可以将其转发到其他服务。我想到了Rails + Devise(+ Redis或mem-cached,或cookie存储等),但是有很多可能性。唯一重要的是,Service X永远不需要对用户进行身份验证。 这两种解决方案在以下方面的比较: 安全 健壮性 可扩展性 使用方便 也许您会建议我在这里没有提到的另一种解决方案? 我更喜欢#1解决方案,但还没有发现很多默认的实现方式可以确保我朝正确的方向前进,因此可以确保我的安全。 我希望我的问题不会被解决。我真的不知道还有什么要问的。 提前致谢

11
线程与线程池
使用新线程和使用线程池中的线程有什么区别?有哪些性能优势?为什么我应该考虑使用池中的一个线程而不是我明确创建的线程?我在这里专门考虑.NET,但一般示例都可以。

3
在Flux架构中,您如何管理商店生命周期?
我正在阅读有关Flux的信息,但示例Todo应用程序对于我来说太简单了,无法理解一些关键点。 想象一下像Facebook这样的具有用户个人资料页的单页应用程序。在每个用户个人资料页面上,我们要无限滚动地显示一些用户信息及其最新帖子。我们可以从一个用户个人资料导航到另一个。 在Flux体系结构中,这将与商店和调度员相对应吗? 我们会为PostStore每个用户使用一个,还是会有某种全球商店?调度程序呢,我们将为每个“用户页面”创建一个新的调度程序,还是使用单例?最后,体系结构的哪一部分负责管理“特定于页面的”商店的生命周期以响应路线更改? 此外,单个伪页面可能具有相同类型的多个数据列表。例如,个人资料页上,我想同时显示关注和跟随。UserStore在这种情况下,单例如何工作?将UserPageStore管理followedBy: UserStore和follows: UserStore?

5
为每个对象创建通用存储库与特定存储库的优势?
我们正在开发ASP.NET MVC应用程序,现在正在构建存储库/服务类。我想知道创建所有存储库都实现的通用IRepository接口是否有任何主要优势,而每个存储库都有自己的唯一接口和方法集。 例如:通用的IRepository接口可能看起来像(从此答案中获取): public interface IRepository : IDisposable { T[] GetAll<T>(); T[] GetAll<T>(Expression<Func<T, bool>> filter); T GetSingle<T>(Expression<Func<T, bool>> filter); T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors); void Delete<T>(T entity); void Add<T>(T entity); int SaveChanges(); DbTransaction BeginTransaction(); } 每个存储库都将实现此接口,例如: 客户资料库:IRepository 产品存储库:IRepository 等等 我们在先前项目中遵循的替代方法是: public interface IInvoiceRepository : IDisposable { EntityCollection<InvoiceEntity> GetAllInvoices(int …

8
为什么我们需要RESTful Web服务?
我将学习RESTful Web服务(最好说一下,因为它是CS硕士学位课程的一部分,所以我必须这样做。) 我已经阅读了Wikipedia上的一些信息,并且还阅读了Sun Developer Network上有关REST的文章,我发现这不是一件容易的技术,有一些用于构建RESTful应用程序的特殊框架,并且经常将其与SOAP Web服务和程序员应该了解何时使用SOAP,何时使用REST是不错的方法。 我记得几年前,SOAP非常流行(流行吗?),并且每个好的CV中都必须包含“ SOAP”项。但是实际上,它很少被使用并用于实现非常简单的目的。 在我看来,REST是另一个“时尚的最后一句话”(否则我可能是完全错误的,因为我从未在实践中见过REST)。 您能否举几个例子说明应该使用REST的原因,为什么没有REST我们不能做同样的事情(或者为什么没有REST我们应该花更多的时间做同样的事情)? UPD:很遗憾,我看不到任何具体的论点会在第一批评论中引起我的注意。让我认为REST是一项了不起的技术! 我想看到这样的答案: 我正在开发另一个复杂的HelloWorld应用程序,我们需要传输大量/微小的数据,因此我向同事提出了REST解决方案: - 哦,该死的!Jonny,我们当然应该使用REST来实现此应用!–是的,比利,我们可以使用REST,但最好使用SOAP。相信我,因为我对开发HelloWorld应用程序有所了解。–但是SOAP是上世纪的老式技术,我们可以使用更好的技术。– Billy,您准备好花3天的时间试用REST吗?我们可以在2个小时内使用SOAP来完成此操作。– 是的,我敢肯定,我们将花费更多的时间来实现相同的安全性/性能/可扩展性/其他任何与SOAP相同的功能。我敢肯定,从现在开始,HelloWorld应用程序应仅使用REST开发。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.