
软件架构
文章平均质量分 88
关于单体、微服务和模块化单体等架构的技术分享
沃趣数据库管理平台
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
迁移到云原生:如何使用微服务迁移应用程序
这简化了与维护服务之间的远程过程调用所需的访问权限相关的复杂性,即使它们在不同的主机上运行。Node.js 的主要优势包括跨平台兼容性、使用单一编码语言 (JavaScript) 的便利性、JavaScript V8 引擎的强大功能、对快速部署和微服务开发的支持、高可扩展性、令人印象深刻的数据处理能力、活跃的开源社区、通过节点包管理器 (NPM) 提供的附加功能、高级托管功能和快速数据流。事实证明,在过渡期间解耦紧密互连的元素具有挑战性,虽然代码库的年龄和大小是耦合问题的潜在指标,但它们并不是确定的。原创 2023-12-27 11:14:49 · 1484 阅读 · 0 评论 -
跨线程保持上下文
构建一个大型的、准备就绪的无状态微服务架构时,我们总是面临一个共同的挑战,即如何保持跨服务和线程的请求上下文,包括将上下文传播到子线程中。因此,在需要确保上下文必须在父线程和子线程之间传播的情况下,我们可以使用应用程序范围的静态InheritableThreadLocal变量来保存上下文并在需要时获取它。:在无状态架构中,上下文传播尤为重要,每个服务应该独立运行,不依赖共享状态。有效的上下文传播有助于提高分布式系统的整体可靠性、可观察性和可维护性,提供了在不同服务中移动的事务状态的统一视图。原创 2023-12-14 10:01:21 · 270 阅读 · 0 评论 -
微服务最佳实践:构建可扩展且高效的系统
它需要对质量属性要求的透彻理解,以及在考虑权衡的同时做出明智的设计决策的能力。同样重要的是对可用技术选择的深入了解,因为它们在微服务的实施和运营中发挥着关键作用。然而,有效实施微服务需要深入了解最佳实践,以充分发挥微服务的潜力,同时避免常见的陷阱。说明:重用是微服务设计中的一个有价值的原则,但它应该仅限于组织内的特定领域。说明:在特定业务功能经历高流量的情况下,将负责处理查询(信息检索)的微服务与处理命令(状态更改功能)的微服务分开可能是有益的。说明:微服务的设计应能够处理故障,而不会造成大范围的中断。原创 2023-12-13 09:27:25 · 1158 阅读 · 0 评论 -
架构模式:API网关
通过为客户端请求提供统一的入口点,它可以简化、保护和优化客户端和服务之间的交互,尤其是在基于微服务的系统中。与往常一样,架构师和开发人员必须权衡利弊,以确定 API 网关在其特定环境中的适合度,确保他们利用其功能,同时减少潜在的陷阱。这对于生产环境来说成为一个非常具有战略意义和敏感的点,但不仅如此,当在给定环境中的网关上工作时,所有依赖于该访问的服务都会受到影响,因此在生产环境中都必须考虑这一点。网关不再进行单独的调用,而是进行单个调用,然后网关从用户和订单服务中获取数据,然后聚合结果。原创 2023-12-06 09:33:20 · 273 阅读 · 0 评论 -
在动态时代引领软件领导地位
探索为什么软件领域的领先地位不是一成不变的。了解依赖过去成功的风险、超然的危险以及持续学习的重要性。适应、打破幻想并理解演变,包括高级工程师等新兴角色,在软件开发的动态领域中桥接编码和策略。原创 2023-12-04 10:30:21 · 144 阅读 · 0 评论 -
使用重试和回退机制确保 Spring 微服务中的 API 弹性
在当今的数字环境中,应用程序严重依赖外部 HTTP/REST API来实现各种功能。这些 API 通常会编排复杂的内部和外部 API 调用网络。这创建了一个依赖网络。因此,当依赖的 API 发生故障或停机时,面向主要应用程序的 API 需要熟练、优雅地处理这些中断。鉴于此,本文探讨了Spring 微服务中重试机制和回退方法的实现。具体来说,它强调了这些策略如何显着增强 API 集成可靠性并显着改善用户体验。原创 2023-11-27 09:36:24 · 1284 阅读 · 0 评论 -
领域驱动设计:为什么企业需要这种方法,谁在使用它,以及它的本质是什么?
有限上下文的清晰分离和普遍语言的使用,促进了更新和修改的无缝整合,最小化了需要进行系统范围内大规模变更的需求。毕竟,正如Eric Evans在他的书中所写的,“为了有效沟通,代码必须基于用来编写需求的相同语言——这同样是开发人员彼此以及与领域专家交流的语言。例如,Standish Group 对 100 个项目的分析发现,因为在需求和设计阶段缺乏领域知识,70% 的返工产生了,这证实了 DDD 促进了企业与开发者之间的理解。它引入的复杂性对于简单的应用程序来说可能是不必要的,评估其在项目中的需求至关重要。原创 2023-11-15 10:04:20 · 258 阅读 · 0 评论 -
架构决策记录 ADR
首先明确定义决策要解决的问题或挑战。这有助于为决策提供上下文,并确保每个人都理解要解决的问题。原创 2023-11-07 09:15:00 · 430 阅读 · 0 评论 -
在分布式系统中实现数据一致性:发件箱模式
在分布式系统的错综复杂的编织中,尤其是在微服务架构内,可靠的消息传递和数据一致性的挑战无处不在且要求极高。发件箱模式,常被引用于微服务的独特领域内,从一个关键场景中浮现出来,确保本地数据库事务的原子性和发布消息到其他服务变得至关重要。在服务间通信的网中,它成为一个策略,确保在中断或网络不一致性中的消息不被遗忘。然而,发件箱模式的适应性和实用性超越了其微服务的起源,将那些适用于各种架构背景的普遍原则编织进其结构中。原创 2023-11-03 09:15:00 · 220 阅读 · 0 评论 -
分布式多主关系数据库的底线业务优势
然而,许多现有的企业应用程序都是建立在关系数据库之上的,关系数据库更加灵活,并且有更多的工具和人才来支持它们。这种方法存在几个问题。事实上,最近几周,AWS 的 us-east-1 区域(最大的)和 Google 的 europe-west-9 区域都发生了这种情况,导致完全依赖它们的应用程序出现数小时的停机时间。显然,应该避免停机,因为这意味着客户的沮丧和业务的损失,具体取决于停机的时间和范围。而且,如果您也转向开源数据库,您将拥有更满意的用户和客户以及更满意的开发人员,这几乎是一个额外的好处。原创 2023-11-02 09:16:25 · 1225 阅读 · 0 评论 -
从开发者的角度看K8S中的复合容器模式
它们在部署方面与“主”容器紧密耦合,因为它们作为同一Pod的一部分部署,但仍然容易替换,并且不破坏扩展容器的单一责任。两个容器之间的通信是快速和可靠的,它们共享对相同资源的访问,使助手组件能够提供可重用的基础架构相关服务。已部署的服务并不是孤立运行的。然而,迁移不可能一次性完成,而且在两个版本的系统中都支持添加新功能的同时,等待整个系统重写多年也是有风险的。这些位于同一位置的容器形成了一个单一的内聚服务单元,例如,一个容器向公众提供存储在共享卷中的数据,而一个单独的sidecar容器则刷新或更新这些文件。原创 2023-11-01 09:12:13 · 157 阅读 · 0 评论 -
微服务架构最佳实践:消息队列
在本文中,我们研究了两种类型的架构——同步和异步。同步系统的缺点是一个组件发生故障会导致整个系统的服务丢失。异步系统通过引入中间队列来保存事件来解决这个问题。基于使用队列的异步通信的体系结构提高了可测试性、可扩展性、可维护性和灵活性。作者:Ranga Karanam更多内容请关注公号【云原生数据库squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。原创 2023-10-27 09:15:00 · 374 阅读 · 0 评论 -
应用程序架构是如何演变的
如果您一直在开发或以某种方式参与应用程序架构,那么在过去的几年中您肯定看到了许多变化。有很多不同类型的架构和技术陆续出现然后消失,以至于有时很难跟踪它们。但是,当你反思它们时,它们不仅可以讲述过去的故事,还可以预示应用程序架构的发展方向。在这篇文章中,我将讨论近几年来应用程序架构在我看来是如何演变的,以及每次演变的驱动因素是什么。我们将讨论单体架构、面向服务的架构(SOA)、微服务,最后是事件驱动架构(EDA)。让我们开始吧!在过去,所有东西都是单体的。大团队会专注于一个单体应用程序,这个应用程序负责执行许原创 2023-10-26 09:25:13 · 125 阅读 · 0 评论 -
微服务、事件驱动架构和 Kafka
想象一下,有一个巨大的整体应用程序,其中许多复杂的功能紧密地联系在一起。可扩展性是一个很大的挑战,部署过程可能会变得非常繁琐,而且由于内部组件高度耦合,改变功能流程也不是那么容易。也许很多人都熟悉这个概念,因为直到几年前这是构建应用程序的标准方法,而且现在生产中仍然有很多单体应用。但与此同时,尤其是在云服务“爆炸”之后,构建产品的过程转向了微服务方法。具有明确范围的小型微服务,可以与其他服务进行通信以完成业务范围。原创 2023-10-25 10:53:46 · 213 阅读 · 0 评论 -
使用 Apache Camel 和 Quarkus 的微服务(五)
在本系列的第三部分中,我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务,这是最常用的 Kubernetes 本地实现之一。虽然这样的本地 Kubernetes 实现对于测试目的非常实用,但其单节点功能并不能满足实际生产环境的要求。因此,为了在类似生产的环境中检查我们的微服务行为,我们需要多节点 Kubernetes 实现。最常见的一种是 OpenShift。原创 2023-10-12 09:42:56 · 1562 阅读 · 0 评论 -
使用 Apache Camel 和 Quarkus 的微服务(四)
正如我们之前所看到的,以JVM模式运行我们的微服务意味着将它们打包并作为可执行JARs运行。但是Quarkus也允许我们将它们编译成机器码并作为原生进程运行。这具有显著提高应用程序启动时间和内存使用的优点。因此,原生模式是Quarkus应用在生产中的首选执行模式。原创 2023-10-10 09:30:00 · 190 阅读 · 0 评论 -
使用 Apache Camel 和 Quarkus 的微服务(三)
Minikube:它可能是最简单和最容易接近的K8s集群。作为一个为了以低资源运行而设计的轻量级K8s发行版,有效的Minikube设置不需要除了你自己的笔记本电脑以外的任何东西。从这个角度来看,Minikube是开发环境的绝佳选择,能够快速访问基础设施元素,如节点、pods、部署、服务和其他K8s的细微之处,在大规模场景中更难实现。原创 2023-10-09 09:13:52 · 488 阅读 · 0 评论 -
分解整体:将整体式架构转换为微服务的容器化之旅
通过使用容器化和微服务打破这个整体,他们创建了一个模块化架构,开发人员能够在其中独立处理其应用程序的特定组件或功能,而不会受到不同团队的干扰。通过投资基于容器的工作负载,Netflix 能够将其整体式应用分解为独立的、更集中的服务,这些服务可以独立部署和管理,从而提供更高的敏捷性和可扩展性,同时更轻松地适应高峰时段的大流量高峰。当您的整体式应用程序已达到需要彻底检修以满足当前和未来需求的地步,或者当您的组织能够承受资源密集型但风险更高的过渡到微服务和容器,同时获得其所有优势时,请选择此方法。原创 2023-07-04 09:49:35 · 882 阅读 · 0 评论 -
多云环境中的微服务应用安全挑战
转向公共云计算提供了一个优势,即无需担心物理基础设施的安全性(即云计算的安全性),但在多云模型中,私有云的基础设施安全仍然是组织的责任。然而,以安全的方式实施这种策略需要熟练的专业人员,但在云和安全领域,熟练的专业人员的可用性增长的速度并不足以填补技能差距。解决技能缺口的一种方法是组织在培训和教育方面进行投资,为现有员工提供学习平台的使用权限,以及沙盒环境,在这些环境中他们可以练习云计算和安全技术,从而更好地为生产环境和现实生活中的云计算和安全挑战做好准备。网络安全和云计算是技术技能缺口中最大的两个领域。原创 2023-05-30 09:34:04 · 1082 阅读 · 0 评论 -
模块化软件架构:使用单体、微服务和模块化单体的优缺点
如您所见,模块化系统可以作为微服务或传统单体架构的良好替代品。每种方法都有其优点和局限性。您应该为您的项目考虑哪一种呢?这完全取决于您将要工作的系统的性质。为了使这个决策更加简单,请查看以下总结主要优点和缺点的表格。原创 2023-09-22 09:30:41 · 853 阅读 · 0 评论 -
微服务安全简介
确保微服务架构的安全性是至关重要的。应用输入验证和输出编码:验证和清理微服务接收到的所有输入数据,以防止注入攻击(如SQL注入或跨站脚本),同时对输出数据进行编码,以避免潜在的安全漏洞,并保护针对微服务接口的消费者免受攻击。访问控制和权限:API网关实现了细粒度的访问控制和权限管理,可以强制执行访问策略、基于角色的访问控制(RBAC)或其他授权机制,确保客户端只能访问适当的微服务和操作,根据其角色和权限。实施身份验证和授权:使用强大的身份验证机制,如OAuth或JWT,验证访问微服务的微服务和用户的身份。原创 2023-07-25 10:07:01 · 825 阅读 · 0 评论 -
微服务的影响:好的、坏的和未来
探索微服务的各个方面,包括其优势、潜在风险以及有效利用它们的最佳实践。自 COVID-19 大流行开始以来,对技术的依赖已经完全循环。在过去三年中,数字应用程序越来越多地用于银行,购物,尤其是医疗保健服务等需求,这引起了消费者对技术的需求,以帮助他们解决日常生活的各个方面。并非巧合的是,今天对应用程序工程师、开发人员和设计师的要求要求他们在软件中提供几年前不需要的多功能性。原创 2023-07-07 09:47:32 · 1816 阅读 · 0 评论 -
使用 Apache Camel 和 Quarkus 的微服务(二)
在本系列的第一部分,我们看到了一个简化版的基于微服务的转账应用程序,该应用程序使用Apache Camel和AWS SDK(软件开发套件)作为Java开发工具,使用Quarkus作为运行时平台进行实现。如前所述,为了运行此类应用的生产版本,可能需要考虑许多部署情景;最初且最简单的情景是以独立方式在本地运行它。这也是我们在这篇新文章中将要探讨的情景。原创 2023-10-08 10:01:39 · 600 阅读 · 0 评论 -
使用 Apache Camel 和 Quarkus 的微服务(一)
因此,我们在这里考虑了一个典型的情景,根据该情景,我们的域模型被定义为XML语法,由一对XSD文件定义。运行单元测试很简单。现在,要部署和运行我们的微服务,我们需要考虑许多不同的情景 - 从简单的本地独立执行到像OpenShift或EKS这样的PaaS部署,再到像Minikube这样的本地K8s集群。aws-camelk-sqs: 该微服务订阅名为myQueue的AWS SQS队列上的消息,并对每个传入消息执行从XML到Java对象的解组操作,然后将其组织为JSON格式,再将其发送到下面的REST服务。原创 2023-10-07 09:38:22 · 578 阅读 · 0 评论