08 2022 档案
摘要:前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏,因为你可能没用过但肯定见过。 比如Spring MVC的拦截器HandlerInterceptor的拦截方法的第三个入参Object handler,虽然它是O
阅读全文
摘要:关于AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。 OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引
阅读全文
摘要:异步与同步 同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。 常规的异步调用处理方式 在Java中,一般在处理类似的场景之时,都是基于创建独立的线程去完成相应的异步调用逻辑, 通过主线
阅读全文
摘要:线程池: 简介:线程池是用来统一管理线程的,在 Java 中创建和销毁线程都是一件消耗资源的事情,线程池可以重复使用线程,不再频繁的创建、销毁线程。 线程池的作用是提高系统的性能和线程的利用率,不再需要频繁的创建和销毁线程。如果使用最简单的方式创建线程,在用户量巨大的情况下,消耗的性能是非常恐怖的,
阅读全文
摘要:选择部署策略: 部署单体应用意味着运行一个或多个来自单个较大应用的相同副本。你通常会配置 N 个服务器(物理或虚拟),每台服务器上会运行 M 个应用实例。单体应用的部署并不总是那么简单,但它比部署微服务应用要简单得多。 微服务应用由数十甚至上百个服务组成。服务使用不同的语言和框架编写。每个服务都是一
阅读全文
摘要:微服务和分布式数据管理问题 每个微服务所拥有的数据对当前微服务来说是私有的,只能通过其提供的 API 进行访问。封装数据可确保微服务松耦合、独立演进。如果多个服务访问相同的数据,当模式(schema)更新时,需要耗时协调更新所有服务。 不同的微服务常常使用不同类型的数据库。现代应用存储和处理着各种数
阅读全文
摘要:客户端发现(client-side discovery) 当使用客户端发现模式时,客户端负责确定可用服务实例的网络位置和请求负载均衡。客户端查询服务注册中心(service registry),它是可用服务实例的数据库。之后,客户端利用负载均衡算法选择一个可用的服务实例并发出请求。 服务实例的网络位
阅读全文
摘要:交互方式: 在单体应用中,组件可通过语言级方法或者函数相互调用。相比之下,基于微服务的应用是一个运行在多台机器上的分布式系统。通常,每个服务实例都是一个进程。因此,服务必须使用进程间通信(IPC)机制进行交互。 一对一 一对多 同步 请求/响应 - 异步 通知 发布/订阅 异步 请求/异步响应 发布
阅读全文
摘要:在使用单体应用架构的情况下,移动客户端通过对应用进行单个 REST 调用来检索此数据 例如:GET api.company.co/productdetails/productId 负载均衡器将请求路由到几个相同应用实例中的其中一个。之后,应用查询各个数据库表并返回响应给客户端。 相比之下,当使用微服
阅读全文
摘要:走向单体地狱: 有一个成功的关键业务应用,它已经发展成为一个只有少数开发人员能够理解的巨大单体。它使用了过时、非生产性技术编写,使得招聘优秀开发人员变得非常困难。应用变得难以扩展,不可靠。因此敏捷开发和应用交付是不可能的 微服务-解决复杂问题: 1、服务也可以使用异步、基于消息的通信; 2、通信是由
阅读全文
摘要:1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,
阅读全文
摘要:代码混乱的常见问题 很多时候我们项目迭代到后期,项目会变得很混乱,往往只有少数人能知道某段代码是干嘛的和该如何去改,或者是干脆谁都不知道,只能靠通过注释去猜测这段代码可能的作用。原因有可能是因为团队内部的人事变动,导致原先写这段代码的人不再管理这段代码了,并且代码写的实在是屎没人捋的清。往往我们称这
阅读全文