微服务相关

http://blog.youkuaiyun.com/u013970991/article/details/73195907

其中微服务的数据去中心化核心要点是:

  • 每个微服务有自己私有的数据库持久化业务数据。
  • 每个微服务只能访问自己的数据库,而不能访问其它服务的数据库。
  • 某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。
  • 数据的去中心化,进一步降低了微服务之间的耦合度。

这里写图片描述


1、以前团队一共就10个人只负责一二个项目,现在突然增加到平均每人维护二三个项目,上线还是采用由运维手工打war包上线,如果有修改的配置文件,则运维同学一台一台的进行修改,不仅容易上线出错,而且每次上线都会搞到半夜。

2、根据上面提到的数据去中心化原则,数据库拆分出来了,一个服务一个数据库实例,但是对后台统计系统来说就是恶梦,数据库拆分出来了统计工作、报表工作该怎么办呢?这部分工作还做不做呢?有人说可以分开统计啊,一个库一个库的来,可是这样的工作量将是巨大的。

3、机房的双活问题,对于金融公司来说双活还是很关键的一项技术指标,对于应用双活来说,其实还是比较容易实现,但是对于数据库来说确是一个技术问题了,对于oracle数据库来说,用oracle官方提供的OGG(Oracle GoldenGate)来进行数据同步的话,根据论坛上面查看的资料可以看出,OGG坑非常多,而且也容易丢数据,更重要的是。。。采用oracle的logminer来进行同步,同步的数据将不是实时的,会有一定延时而且在定时读取方面的工作上还需要自己进行开发,采用oracle的DataGuard也只能做主从同步,却不能做主主双活。于是通过调研过后,最终还是决定自己独立开发。

4、使用Dubbo或者Spring cloud就是微服务了吗?好吧,使用了Dubbo以后发现还有非常多的工作需要做,Dubbo只是一个服务治理框架而已,还需要开发分布式调用监控系统、统一配置管理中心,统一定时调度,还要在每个服务中做防重幂等,还要做并发限流,缓存也要根据不同的服务做隔离等等工作。。。

那我们用Spring cloud做一个大一统的整合可以吗?于是看到Spring cloud原来有这些坑啊:

  • 注册IP问题

早期的Spring Cloud Eureka在注册获取网卡IP时,不能区分外网网卡和内网网卡,如果安装了虚拟机和docker也不能区分虚拟网卡,每次启动注册的IP都有可能不一样,如果要注册为外网网卡IP,那运行带宽就不够,这个bug应该说是比较严重的问题,因此重写了网卡IP获取的逻辑来解决,同时也反馈给了spring cloud团队,再后期的版本中添加了网卡接口排序和通过名称过滤的功能来得到解决。

  • HealthCheck的问题

在一些极小概率的情况下,会导致Eureka Server 下线微服务实例,出现“Remote status from Eureka server is down”的问题,即便是重启微服务也无济于事,不过已经有码友在spring cloud 官方github贴出了解决方法的issue。

  • Feign使用不当带来的性能问题

其他的小坑也就忍了,大坑却不能。。。。于是去各大社区讨论发现原来大家都对Cloud的不少组件进行了二次封装。。。



### 微服务架构相关技术、工具和框架 微服务架构是一种将应用程序设计为一组小型、独立服务的架构风格,这些服务可以独立部署、扩展和维护。为了支持这种架构风格,需要使用一系列技术和工具来解决服务间的通信、治理、监控等问题。以下是与微服务架构相关的常见技术栈和工具[^1]。 #### 1. 服务注册与发现 服务注册与发现是微服务架构中的核心功能之一,用于动态管理服务实例的位置信息。常用工具包括: - **Nacos**:阿里巴巴开源的服务发现和配置管理工具,支持动态服务发现、配置管理和服务健康检查[^3]。 - **Consul**:HashiCorp 提供的服务网格解决方案,支持服务发现、健康检查和分布式配置存储。 - **Eureka**:由 Netflix 开源的服务注册与发现工具,广泛应用于 Spring Cloud 生态系统中。 #### 2. 配置管理 配置管理工具用于集中管理和分发微服务的配置信息,确保一致性并简化运维工作。 - **Spring Cloud Config**:基于 Git 的配置管理工具,适用于 Spring Cloud 应用程序。 - **Vault**:HashiCorp 提供的安全工具,支持密钥管理、加密服务和特权访问管理。 - **Apollo**:携程开源的分布式配置管理中心,支持多环境配置管理和实时更新。 #### 3. 消息队列 消息队列在微服务架构中用于实现异步通信和解耦服务之间的依赖关系。常见的消息队列工具包括: - **Kafka**:高吞吐量的消息队列系统,适用于大数据流处理场景[^2]。 - **RabbitMQ**:功能丰富的消息中间件,支持多种协议和复杂的路由规则。 - **ActiveMQ**:Apache 提供的经典消息队列系统,支持多种传输协议。 - **RocketMQ**:阿里巴巴开源的分布式消息队列,具有高可靠性和高性能特点。 #### 4. API 网关 API 网关作为微服务架构的入口,负责请求路由、负载均衡、认证授权等功能。 - **Zuul**:Netflix 开源的网关工具,支持动态路由和过滤器功能。 - **Spring Cloud Gateway**:基于 Spring 生态的轻量级网关解决方案。 - **Kong**:高性能的开源 API 网关,支持插件化扩展。 #### 5. 分布式追踪与监控 分布式追踪和监控工具用于分析微服务之间的调用链路,帮助快速定位问题。 - **Zipkin**:由 Twitter 开源的分布式追踪系统,支持数据收集和可视化。 - **Jaeger**:CNCF 孵化的分布式追踪工具,支持大规模集群部署。 - **SkyWalking**:国产开源的 APM(应用性能管理)工具,支持服务拓扑图和服务链路监控[^2]。 #### 6. 容器编排与部署 容器技术是微服务部署的重要支撑,能够提高资源利用率和部署效率。 - **Docker**:标准化的应用容器化工具,支持跨平台运行。 - **Kubernetes (K8s)**:强大的容器编排平台,支持自动扩展、负载均衡和服务发现。 #### 7. 数据库与缓存 微服务架构通常采用去中心化的数据库策略,每个服务拥有自己的数据库。 - **MySQL/PostgreSQL**:关系型数据库,适用于事务性强的场景。 - **MongoDB/Cassandra**:NoSQL 数据库,适用于高并发和大数据量场景。 - **Redis/Memcached**:内存缓存系统,用于加速数据读取和会话管理。 ```python # 示例代码:使用 Kafka 发送消息 from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('my_topic', b'Hello, Kafka!') producer.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值