首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

讨论软件架构的30个共同原则

在WSO2,我已经完成了八年多的架构评审。WSO2拥有广泛的产品组合,包括众所周知的WSO2 ESB,WSO2 API Manager和WSO2 SP。...但是,从长远来看,我们通过让他们自己思考,让他们发展架构,有时让他们犯错误来建立更好的团队。当我们专注于团队时,他们会随着时间的推移而变得更好。执行起来要容易得多,因为架构首先是团队的想法。...线程之间共享的可变数据会降低程序的速度。如果可以,请使用并发数据结构,并且仅在必要时使用同步。尝试尽可能少地抓住锁。如果您计划在持有锁定时阻止,请确保您知道自己在做什么。如果它可以破坏,它会。...原则27:根据用户可以回答的问题配置值,而无需计算设置值(例如,不要求最大缓存条目的数量 - 而是要求最大内存应该用于缓存) 原则28:如果看到未知配置,则抛出错误。永远不要忽视它。...虽然短期内可能会更便宜,更容易决定架构,但从长远来看,指导并让团队找到自己的方式会带来好处。 如果你不小心,建筑飞行更容易,设计师只告诉他的架构是错误的,但不是为什么它是错的。

96630

优秀架构师必须了解的6大方面30条设计原则

相信你学会了,工作起来也会事半功倍,或许还可帮你避免很多无用的加班! 在 WSO2,我参与架构评审的时间已长达八年之久。...WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。在过去八年中,我们对许多产品和功能进行了讨论、设计、改进和重新设计。...原则27:询问用户配置值的时候,注意选择用户无需即可设置的值(例如,不要问用户需要的最大缓存条目数量,而是要问他想要用于缓存的内存数量) 原则28:如果发现未知配置,则抛出错误。永远不要忽视它。...在调试过程中,无提示的配置错误会浪费我们很多调式时间。 六、难点 原则29:尝试新语言很容易,但要正确使用却很难。除非公司愿意组建一个十人团队并花一年的时间来学习,否则尽量不要这样做。...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我认为在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。

94420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    成为一个优秀架构师,你必须了解的 30 条设计原则

    WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。在过去八年中,我们对许多产品和功能进行了讨论、设计、改进和重新设计。...原则 27:询问用户配置值的时候,注意选择用户无需即可设置的值(例如,不要问用户需要的最大缓存条目数量,而是要问他想要用于缓存的内存数量) 原则 28:如果发现未知配置,则抛出错误。永远不要忽视它。...在调试过程中,无提示的配置错误会浪费我们很多调试时间。 难点 原则 29:尝试新语言很容易,但要正确使用却很难。除非公司愿意组建一个十人团队并花一年的时间来学习,否则尽量不要这样做。...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我认为在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。...如果你不够投入和细心,你只指出错误,但是不道明错误原因,那么你的意见可能会让团队感到困惑。避免这种情况的一种方法是拥有一套普遍接受的原则,这些原则是讨论架构时遵循的基本点,也是初学者学习架构的好资源。

    1.2K10

    如何成为一名优秀的架构师?

    在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。...但是,从长远来看,我们会组建一个团队,让他们自己不断思考、改善架构,并从他们的错误中来提升自己。 当我们专注于团队时,他们自然会随着时间的推移而变得更好。...原则27:询问用户配置值的时候,注意选择用户无需即可设置的值(例如,不要问用户需要的最大缓存条目数量,而是要问他想要用于缓存的内存数量) 原则28:如果发现未知配置,则抛出错误。永远不要忽视它。...在调试过程中,无提示的配置错误会浪费我们很多调式时间。 难点 原则29:尝试新语言很容易,但要正确使用却很难。除非公司愿意组建一个十人团队并花一年的时间来学习,否则尽量不要这样做。...如果你不够投入和细心,你只指出错误,但是不道明错误原因,那么你的意见可能会让团队感到困惑。

    1.2K60

    WSO2 ESB(5)

    加上WSO2的Carbon功能,用户现在有能力管理他们的应用程序,范围从Web服务,Web应用程序在一个统一的方式在应用程序服务器管理控制台本身。...WSO2的Apache软件基金会的Web服务项目,通过领先的开源组件的组合。加上我们自己的整合代码,WSO2公司提供生产质量的开源软件。...在此版本的新特点 内置的数据服务支持 服务器角色管理功能 为便于Cluster配置的部署同步 改进的JAX - WS支持 改进的SOAP示踪 在服务列表页的改进 两个服务和服务组列表 在服务列表中的安全指标...改进的样品和文件 改进Web应用程序和Web服务的类加载 嵌入式Tomcat7.0.14的支持 支持的Servlet API3.0 在发行说明提供完整的功能列表。...这是可以做到在登录框上使用“服务器URL”项。 要解决任何问题签署,请按一下“登入说明” ? 管理控制台的主页将包含系统总结 ? 故障服务 ? 服务组管理 ?

    2.3K90

    WSO2 ESB(4)

    WSO2的企业服务总线(ESB)的用户指南 用户指南介绍了如何配置WSO2 ESB使用基于Web的管理控制台。...此外,计划的任务可能会注入到ESB中的新邮件,定期或执行其他任务。 代理服务 代理服务定义ESB上,可以接受请求,调解,并提供实际服务托管的虚拟服务。...这样一个任务可能使用的ESB/ Apache Synapse的API的调查对外服务,注入到ESB消息或执行任何可以在Java中实现的任务。 有关详细信息,预定的任务,请参阅文档。...若要套用您的变更,并点击“更新”按钮保存配置到本地存储。这将首先验证所提供的配置,并警告您有关的任何故障或检测不一致。用户有选择进行更新操作或取消在这一点上。...一旦这些文件被加载,其内容缓存在ESB为指定的持续时间,以及更新的缓存期结束。 在确定代理服务的目标序列和目标端点时,您可以使用这些文件。 管理注册表项 请参阅文档管理有关详细信息,嵌入注册表。

    4.3K80

    探索RESTful API开发,构建可扩展的Web服务

    如果查询返回了结果,我们提取资源信息并将其编码为JSON格式返回给客户端。如果未找到资源,我们返回404错误响应。实现POST请求实现POST请求时,我们的目标是在服务器上创建新资源。...实现PUT请求实现PUT请求时,我们的目标是更新现有资源的信息。在RESTful API中,PUT请求通常用于更新服务器上的资源。...生成JWT: 当用户登录成功时,服务器生成一个JWT并将其发送回客户端。JWT通常包含用户的唯一标识符(如用户ID)和一些其他信息(如用户名或角色)。...下面是一个简单的异常处理机制的示例:try { // 尝试执行某些可能会抛出异常的代码 $result = some_code_that_may_throw_an_exception();}...,我们可以确保在应用程序发生异常时,能够及时地向客户端提供清晰和友好的错误消息,从而提高用户体验并方便故障排除。

    27800

    springboot第29集:springboot项目详细

    数据类型不匹配:有时候插入的数据类型与表的定义不一致,也会导致这个错误。比如,插入了一个字符串值到一个整数类型的列。...表结构变更:如果在数据库表结构发生了变化,例如添加或删除了某些列,而代码中的插入操作没有相应地更新,也可能导致这个错误。...具体原因是数据库表中的'introduce_id'字段被定义为不允许为空,并且没有设置默认值,因此在插入数据时必须为该字段提供一个值。...出现这个错误的原因可能是以下几种情况: 缺少'introduce_id'字段的值:在插入数据时,未为'introduce_id'字段提供值,或者提供了一个空值(null),导致数据库无法生成该字段的值。...例如,将其设置为自增字段,或者设置一个默认值,这样在插入数据时如果未提供具体值,数据库将使用默认值。

    31930

    微服务:API网关在API安全中的作用

    威胁保护 没有威胁保护,API网关、API及其集成服务器的本机服务基本上是不安全的。这意味着潜在的黑客、恶意软件或任何匿名的局外人都可以很容易地尝试传播一系列攻击,比如DDoS或SQL注入。...API是企业与世界进行数字化连接的门户。不幸的是,有些恶意用户的目标是通过注入意外的命令或表达式来删除、删除、更新甚至创建api可用的任意数据来访问后端系统。...日志记录 许多API开发人员对所有成功请求使用200,对所有失败使用404,对某些内部服务器错误使用500,在某些极端情况下,在详细的堆栈跟踪之上,在正文中使用200,并带有失败消息。...返回一个“平衡的”错误对象是一个很好的实践,它具有正确的HTTP状态代码、最少的必需错误消息,并且在错误条件下没有堆栈跟踪。这将改进错误处理并保护API实现细节不受攻击者的攻击。...开发源码的API 网关: 以下是一些值得一看的产品: Tyk WSO2 API Manager Kong Community Edition 结论 在谈到API安全性时,我们必须明白,安全性是公司、组织

    3.1K40

    Apache 架构师总结的 30 条架构原则

    最终用户会感谢你为他们提供了汽车。 服务端设计和并发 原则 13:要知道一个 server 是如何运行的,从硬件到操作系统,直到编程语言。优化 IO 调用的数量是你通往最好架构的首选之路。...原则 26:设计不良的配置会造成一些困扰。应该总是为配置提供一些示例值。原则 27: 配置值必须是用户能够理解和直接填写的。...比如:不能让用户填写最大缓存条目的数量,而是应该让用户填写可被用于缓存的最大内存。原则 28: 如果输入了未知的配置要抛出错误。永远不要悄悄的忽略。...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我更倾向于在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。...虽然在短期内可能会觉得也没什么,但从长远看,指导团队找到自己的方式会带来好处。如果你稍不留神,就很容易让架构成为一个空洞的词汇。比如设计者会说他的架构是错误的,但不知道为什么是错误的。

    25920

    RESTful规范

    POST一般向“资源集合”型uri发起 POST/animals  //新增动物 POST/zoos/1/employees //为id为1的动物园雇佣员工 PUT:更新单个资源(全量),客户端提供完整的更新后的资源...不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求; 2.     正确设置http状态码,不要自定义; 3.     ...对第三点的实现稍微多说一点: Java服务器端一般用异常表示 RESTful API的错误。API 可能抛出两类异常:业务异常和非业务异常。 ...非业务类异常 表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。 业务类异常必须提供2种信息: 1.     ...PUT时,要看具体的业务层代码,看看接口产生的结果是否幂等,如果幂等用PUT,相反用POST       如:接口接收到一资源,资源存在更新,不存在插入新数据,这个接口就要用PUT 参考:https:/

    2.1K00

    Java 异常处理的 20 个最佳实践,你知道几个?

    检查的异常表示在正常系统操作期间可能发生的预期问题。 当你尝试通过网络或文件系统使用外部系统时,通常会发生这些异常。 大多数情况下,对检查性异常的正确响应应该是稍后重试,或者提示用户修改其输入。...这个原则隐含地说,你将更有可能把它放在低级方法中,在那里你将检查单个值是否为空或不适合。而且你会让异常堆栈跟踪上升好几个级别,直到达到足够的抽象级别才能处理问题。...在 try 模块里面访问资源,在 finally 里面最后关闭资源。即使在访问资源时发生任何异常,资源也会优雅地关闭。 只抛出和方法相关的异常 相关性对于保持应用程序清洁非常重要。...所有信息都输出到相同的日志文件,即使它们在实际代码中为前后行,但是在日志文件中这两个日志消息可能会间隔 100 多行。...例如,在尝试关闭数据库连接时的异常处理。

    82620

    现代初创公司的架构

    通过对需求的分析,我们能够检测出三组作业: 核心 API 与通常 Crud 类的活动; 搜索和推荐; 根据时间表做一些有用的事情的工作负载(几乎在偶尔延迟的时候是可以的)。...API 契约是一件很棒的事情,但是当真实服务器抛出 “模式验证错误” 或因 HTTP 500 错误代码而惨遭失败时,会更明显地出现问题。 后端服务最初分为两组——API 单体、搜索和推荐。...当你有几十个具有相似密码的假用户时,身份验证在定义测试场景时就不那么成问题了! 尝试新事物或选择第三方提供商 与新技术打交道总是有点危险。...另一个主要优势是,无论你通过 Terraform 管理什么,都会自动更新(当你或 CI/CD 运行相应的命令时)。...在这里,我们仍然在探索各种选择,因为似乎搭配 grep 的老式 kubectl logs 可以更及时地为“app1 pod 的最后一个错误是什么”这样的问题提供见解,而不会迷失在无穷无尽的用户界面控件中

    1.7K20

    004微信小程序云开发API数据库-插入记录-删除记录-更新记录

    用户可以在小程序中添加新的购物清单记录,包括商品名称、价格等信息。为了实现这个功能,我们需要使用微信小程序云开发API数据库的插入记录方法。代码说明在微信小程序中,我们需要引入相关的库和组件。...用户在购物过程中可能会删除一些已经购买或者不再需要的商品,此时我们需要从购物清单集合中删除对应的记录。代码说明在微信小程序中,我们需要引入相关的库和组件。...注意:在删除记录之前,需要确保该记录不再被其他数据引用或依赖。另外,删除记录可能会消耗一定的时间和资源,需要根据实际情况进行权衡。...}) return result // 返回更新结果 } catch (e) { console.error(e) // 打印错误信息 throw e // 抛出错误 } finally...用户在购物过程中可能会对购物清单进行修改,比如更改商品数量或者删除某些商品。此时,我们需要使用微信小程序云开发API数据库的更新记录功能来更新购物清单集合中的相关记录。

    20910

    【读码JDK】-java.lang包介绍

    实现了该接口 ArithmeticException 发生算术异常时抛出,比如"除数为零"时会抛出该异常 ArrayIndexOutOfBoundsException 非法索引访问数组,比如索引为负数或大于或等于数组的大小...当Java虚拟机检测到正在加载类的超类存在循环时,抛出 ClassFormatError 当Java虚拟机尝试读取类文件并格式化错误或者无法解析类文件时,抛出 ClassLoader 类加载器是一个负责加载类的对象...通常,编译器会捕获此错误; 如果类的定义不兼容地更改,则此错误只能在运行时发生 IllegalAccessException 当应用程序尝试反射创建实例(数组除外),当前正在执行的方法无法访问指定类的字段...Java new构造来实例化抽象类或接口时,抛出该异常 InstantiationException 当应用程序尝试使用Class的newInstance方法创建类的实例时抛出,但无法实例化指定的类对象...NoSuchMethodException 无法找到特定方法时抛出 NullPointerException 当应用程序在以下情况尝试使用null时抛出。 这些包括: 调用null对象的实例方法。

    1.6K20

    Apache架构师总结的30条设计原则!

    最终用户会感谢你为他们提供了汽车。 服务端设计和并发 原则 13: 要知道一个 server 是如何运行的,从硬件到操作系统,直到编程语言。优化 IO 调用的数量是你通往最好架构的首选之路。...原则 26: 设计不良的配置会造成一些困扰。应该总是为配置提供一些示例值。 原则 27: 配置值必须是用户能够理解和直接填写的。...比如:不能让用户填写最大缓存条目的数量,而是应该让用户填写可被用于缓存的最大内存。 原则 28: 如果输入了未知的配置要抛出错误。永远不要悄悄的忽略。...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我更倾向于在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。...虽然在短期内可能会觉得也没什么,但从长远看,指导团队找到自己的方式会带来好处。如果你稍不留神,就很容易让架构成为一个空洞的词汇。比如设计者会说他的架构是错误的,但不知道为什么是错误的。

    28820

    常常听到的流处理是什么?

    流处理是一种允许用户在接收到的数据后的短时间内快速查询连续数据流和检测条件的技术。检测时间从几毫秒到几分钟不等。 例如,通过流处理,您可以查询来自温度传感器的数据流,并在温度达到冰点时接收警报。...尽管历史上有些术语存在差异,但现在,工具已经在术语流处理下趋于一致。 它是大数据技术之一。 它被Apache Storm推广,现在有很多竞争者。 为什么需要流处理?...我们称之为一种语言, 使用户能够编写 sql (如查询) 来查询流式数据流 sql 语言。 诸如WSO2 Stream Processor和SQLStreams之类的项目已经支持SQL五年多了。...想想一个永无止境的表,新的数据会随着时间的推移而出现。流就是这样一个表。流中的一个记录或一行称为事件。但是它有一个模式,其行为就像数据库行一样。...最后,将流处理器配置为对结果执行操作。 这可以通过在Stream Processor触发时调用服务或将事件发布到代理主题并聆听该主题来完成。 有许多流处理器可用。

    1.5K20

    Sentry API 常用接口汇总

    未处理的异常 在应用程序中,未捕获的异常通常会导致程序崩溃。这些异常会被 Sentry 自动捕获并记录为 sentry.Error 类型的错误。...网络或数据库错误 当应用程序与外部服务(如数据库、API、文件系统)交互时,可能会发生网络超时、连接失败或数据查询错误等问题。这些错误也会被捕获并记录为 sentry.Error 类型。 4....配置或环境错误 应用程序启动时可能会遇到配置文件缺失、环境变量设置错误或依赖库版本不匹配等问题。这些问题会导致应用程序无法正常运行,Sentry 会将这些错误记录下来。 5....用户输入错误 用户输入的数据不符合预期(例如表单验证失败)也可能导致应用程序抛出异常。这些异常会被捕获并记录,以帮助开发者改进用户输入的验证和处理逻辑。 6....资源访问错误 当应用程序尝试访问不存在的文件、目录或其他资源时,会抛出相应的异常。例如,文件系统中的 FileNotFoundError 或权限不足导致的 PermissionError。

    36410
    领券