从零开始创建微服务系统四 - 第一部分

简介: 好吧,标题似乎是一个大胆的陈述,所以让我们澄清一下我所说的微服务系统是什么意思。我不是指要在生产中使用的任何类型的框架,只是一个了解微服务架构的挑战以及它如何在幕后工作的项目。我不打算将这个系列作为分步指南,因为到最后它可能至少有 100 篇文章。相反,我将尝试写关于设计选择、如何编写一些机制并突出一些有趣的问题(从全栈开发人员的角度来看)我在此过程中偶然发现。

介绍

好吧,标题似乎是一个大胆的陈述,所以让我们澄清一下我所说的微服务系统是什么意思。我不是指要在生产中使用的任何类型的框架,只是一个了解微服务架构的挑战以及它如何在幕后工作的项目。

我不打算将这个系列作为分步指南,因为到最后它可能至少有 100 篇文章。相反,我将尝试写关于设计选择、如何编写一些机制并突出一些有趣的问题(从全栈开发人员的角度来看)我在此过程中偶然发现。

我们在建造什么

首先,我们的目标是什么类型的系统?这将决定我们需要什么样的服务,以及系统的非功能性需求。

最近在玩《中土世界:战争之影》,心想:为什么不为索伦军队创建管理应用程序呢?因此,一个系统来统治他们所有人的想法(简称*“*一个系统” )。然后我决定把它变成一种学习体验,所以我不会把自己限制在我知道的 Java 和 Angular 上,也会尝试学习其他语言。

技术栈

我打算使用和学习至少基础知识的技术是:

  1. 对于服务:
  2. Java ( Zulu) 和Spring BOOT (我从头开始写的东西是有限制的;))
  3. Haskell- 因为我以前从未使用过函数式语言
  4. Python- 因为它广受欢迎
  5. GoLang - 因为为什么不
  6. 对于前端:
  7. UI的选型
  8. 服务器端的Java ( Zulu) 和Spring BOOT
  9. 对于部署:
  10. Docker和 Docker-compose
  11. 架构模式:
  12. 微服务
  13. 前端SPA

现在,已经决定了,我们是否要使用 Netflix Hystrix、Ribbon 等库?我们要使用 RabbitMQ 吗?嗯,没有。由于这是一个学习经验,我们将尝试自己实施。它可能最终不会成为有史以来最好的代码,但它会让我们了解这些库是如何实现的,这反过来又可以帮助我们在职业生涯中更好地调试或实现其他解决方案。

架构 (v0.0.1)

好的,或多或少地决定了技术堆栈,我们现在需要设计实际的架构。The One基本上是一个资源管理系统,其中资源范围从乌鲁克到前哨,再到食物链和武器储存。

每个管理系统都需要有某种用户数据库来允许访问控制、身份验证和授权服务,以及 UI 应用程序来允许用户友好地访问。但是由于选择的架构是微服务,我们不能简单地编写一个 Spring BOOT 应用程序并完成它,我们还需要:

  • API网关连接不同的服务
  • 服务发现允许我们动态启动和停止服务
  • 记录器服务聚合来自每个服务的日志
  • 服务监控
  • 还有一些其他的事情

基本图将如下所示(为了使其更小,我省略了一些内容):

看起来它不会做太多工作 - 通常在公司中可能不会 - 但我们将从头开始构建它,因此,第一个里程碑将是:

  1. 创建 API 网关服务,代理对用户服务的请求,以从服务发现获得地址。
  2. 用户服务和 API 网关将等待服务发现启动,然后再启动自己。
  3. 启动后,用户服务将向服务发现注册自己,并传递可用的 IP 和端口。
  4. 将有脚本在本地或使用 docker 构建和运行所有内容。
目录
相关文章
|
Kubernetes 负载均衡 微服务
Kubernetes 生态系统中的微服务治理
【8月更文第29天】随着微服务架构的普及,管理分布式系统的复杂性也随之增加。Kubernetes 作为容器编排的事实标准,为微服务架构提供了强大的支持。结合像 Istio 这样的服务网格工具,Kubernetes 能够有效地解决微服务治理中的诸多挑战,如服务发现、负载均衡、流量管理和安全策略等。
257 3
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
409 1
|
人工智能 搜索推荐 前端开发
从代码到心灵对话:我的CodeBuddy升级体验之旅(个性化推荐微服务系统)
本文分享了使用CodeBuddy最新版本的深度体验,重点探讨了Craft智能体、MCP协议和DeepSeek V3三大功能。Craft实现从对话到代码的无缝转化,大幅提升开发效率;MCP协议打通全流程开发,促进团队协作;DeepSeek V3则将代码补全提升至新境界,显著减少Bug并优化跨语言开发。这些功能共同塑造了AI与程序员共生的未来模式,让编程更高效、自然。
1056 15
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
409 0
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
1505 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
|
存储 NoSQL Linux
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
838 0
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
344 4
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
584 2
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
1010 30
|
缓存 Java 开发者
开发故事:一个 @Async 如何搞瘫整个微服务系统
大家好,我是小米,一个热爱分享技术的29岁开发者。本文讲述了一个困扰我们团队的开发环境问题,最终发现罪魁祸首竟是 `@Async` 注解。我们通过详细分析错误日志和 Spring 的 Bean 代理机制,逐步排查并解决了这一难题。文章介绍了三种解决方案:调整依赖结构、使用 `@Lazy` 延迟加载以及禁用 `@Async` 的代理功能。希望对你有所帮助!欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
234 5
开发故事:一个 @Async 如何搞瘫整个微服务系统