文章开始前推荐一下我的专栏,里面记录了我的一些学习经验和一些Java技术的分享,也有一些朋友(来自互联网各个大厂)把他们的一些技术的面试总结分享在我的专栏里。欢迎大家关注也欢迎大家投稿!

Java架构经验分享?

zhuanlan.zhihu.com
图标

前言

为什么要使用微服务?

随著互联网的快速发展,各行各业都在用互联网。互联网已经离不开人们的形形色色。随著越来越多的用户,业务场景也愈来愈复杂。

传统的单体架构已经很难满足互联网技术发展的要求,代码可维护性扩展性和可读性降低,维护成本的提高都是驱动微服务的发展趋势。

微服务哪些框架

Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站

点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:

JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿

里巴巴在国人眼里已经从电商升级为一家科技公司了。

Spring Cloud,从命名我们就可以知道,它是 Spring Source 的产物,Spring 社区的强

大背书可以说是 Java 企业界最有影响力的组织了,除了 Spring Source 之外,还有

Pivotal 和 Netfix 是其强大的后盾与技术输出。其中 Netflix 开源的整套微服务架构套件是

Spring Cloud 的核心。

说说 RPC 的实现原理

首先需要有处理网路连接通讯的模块,负责连接建立、管理和消息的传输。其次需要有编

解码的模块,因为网路通讯都是传输的位元组码,需要将我们使用的对象序列化和反序列

化。剩下的就是客户端和伺服器端的部分,伺服器端暴露要开放的服务介面,客户调用服

务介面的一个代理实现,这个代理实现负责收集数据、编码并传输给伺服器然后等待结果

返回。

说说 Dubbo 的实现原理

dubbo 作为 rpc 框架,实现的效果就是调用远程的方法就像在本地调用一样。如何做到

呢?就是本地有对远程方法的描述,包括方法名、参数、返回值,在 dubbo 中是远程和本

地使用同样的介面;然后呢,要有对网路通信的封装,要对调用方来说通信细节是完全不

可见的,网路通信要做的就是将调用方法的属性通过一定的协议(简单来说就是消息格

式)传递到服务端;服务端按照协议解析出调用的信息;执行相应的方法;在将方法的返

回值通过协议传递给客户端;客户端再解析;在调用方式上又可以分为同步调用和非同步调

用;简单来说基本就这个过程

Spring Boot 有哪些优点?

Spring Boot 的优点有:

减少开发,测试时间和努力。

使用 JavaConfig 有助于避免使用 XML。

避免大量的 Maven 导入和各种版本冲突。

提供意见发展方法。

通过提供默认值快速开始开发。

没有单独的 Web 伺服器需要。这意味著你不再需要启动 Tomcat,Glassfish 或其他任何东

西。

需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加

用@Bean 注释的方法,Spring 将自动载入对象并像以前一样对其进行管理。您甚至可以将

@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。

基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-

Dspring.profiles.active = {enviornment}。在载入主应用程序属性文件后,Spring 将在

(application{environment} .properties)中载入后续的应用程序属性文件。

如何实现 Spring Boot 应用程序的安全性?

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添

加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆

盖其方法。

如何集成 Spring Boot 和 ActiveMQ?

对于集成 Spring Boot 和 ActiveMQ,我们使用

spring-boot-starter-activemq

依赖关系。 它只需要很少的配置,并且不需要样板代码。

什么是 Swagger?你用 Spring Boot 实现了它吗?

Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是

用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以

与伺服器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻

辑来理解远程服务并与其进行交互。因此,Swagger 消除了调用服务时的猜测。

使用 Spring Cloud 有什么优势?

使用 Spring Boot 开发分散式微服务时,我们面临以下问题

  • 与分散式系统相关的复杂性-这种开销包括网路问题,延迟开销,带宽问题,安全问题。
  • 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
  • 冗余-分散式系统中的冗余问题。
  • 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网路链路,中央处理单元,或磁碟驱动器的分布。
  • 性能-问题 由于各种运营开销导致的性能问题。
  • 部署复杂性-Devops 技能的要求。

负载平衡的意义什么?

在计算中,负载平衡可以改善跨计算机,计算机集群,网路链接,中央处理单元或磁碟驱动器等多种计算

资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源

的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软体或硬体,例如多层交换机或域名系统伺服器进程。

什么是 Netflix Feign?它的优点是什么?

Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。Feign 的第一个目标

是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。在 employee-consumer 的例子中,我们

使用了 employee-producer 使用 REST 模板公开的 REST 服务。

但是我们必须编写大量代码才能执行以下步骤

  • 使用功能区进行负载平衡。
  • 获取服务实例,然后获取基本 URL。
  • 利用 REST 模板来使用服务。 前面的代码如下

@Controller
public class ConsumerControllerClient {

@Autowired
private LoadBalancerClient loadBalancer;

public void getEmployee() throws RestClientException, IOException {

ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");

System.out.println(serviceInstance.getUri());

String baseUrl=serviceInstance.getUri().toString();

baseUrl=baseUrl+"/employee";

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}

之前的代码,有像 NullPointer 这样的例外的机会,并不是最优的。我们将看到如何使用 Netflix Feign使呼叫变得更加轻松和清洁。如果 Netflix Ribbon 依赖关系也在类路径中,那么 Feign 默认也会负责负载平衡。


读者福利、完整面试题【含答案】Java核心笔记,Java架构面试专题(pdf文档)

资料获取方式:关注后台私信【资料】免费获取!


关于微服务,总结了一些学习经验,分享给大家

还整理了一些Java面试题资料

喜欢文章记得关注我点赞哟,感谢支持!

推荐阅读:

相关文章