当前位置:首页 > 时尚生活

springcloud微服务架构 如何使用Spring Cloud构建微服务架构?(文末赠书)

"

微服务架构模式的核心在于如何识别服务的边界,设计合理的微服务。

然而,如果微服务架构要应用到生产项目中,并在这种架构模式中发挥重要作用,就需要微服务框架的支持。

在Java生态系统中,最广泛使用的微服务框架是网飞操作系统和Spring Cloud的集成。

它包括:

Spring Cloud Config:配置管理工具,支持使用 Git 存储配置内容,可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。Spring Cloud Netflix:对 Netflix OSS 进行了整合。 其中又包括: Eureka:服务治理组件,包含服务注册中心、服务注册与发现。 Hystrix:容器管理组件,实现断路器模式,倘若依赖的服务出现延迟或故障,则提供强大的容错功能。 Ribbon:客户端负载均衡的服务调用组件。 Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。 Zuul:网关组件,提供智能路由、访问过滤等功能。 Archaius:外部化配置组件。Spring Cloud Bus:事件、消息总线。Spring Cloud Cluster:针对 ZooKeeper、Redis、Hazelcast、Consul 的选举算法和通用状态模式的实现。Spring Cloud Cloudfoundry:与 Pivotal Cloudfoundry 的整合支持。Spring Cloud Consul:服务发现与配置管理工具。Spring Cloud Stream:通过 Redis、Rabbit 或者 Kafka 实现的消息驱动的微服务。Spring Cloud AWS:简化和整合 Amazon Web Service。Spring Cloud Security:安全工具包,提供 Zuul 代理中对 OAuth2 客户端请求的中继器。Spring Cloud Sleuth:Spring Cloud 应用的分布式跟踪实现,可以整合 Zipkin。Spring Cloud ZooKeeper:基于 ZooKeeper 的服务发现与配置管理组件。Spring Cloud Starters:Spring Cloud 的基础组件,是基于 Spring Boot 风格项目的基础依赖模块。Spring Cloud CLI:用于在 Groovy 中快速创建 Spring Cloud 应用的 Spring Boot CLI 插件。

服务治理

当一个系统中的微服务越来越多的时候,我们需要对服务进行管理,提供统一的服务注册表,然后在其框架下提供发现服务的功能。

这样,避免了多个微服务的配置以及微服务和客户端之间的耦合。

春云尤里卡是网飞尤里卡实现服务注册和发现的一个包。

尤里卡服务器即服务注册表支持高可用性配置。它依靠强一致性来提供良好的服务实例可用性,并支持集群模式部署。

尤里卡客户端负责服务注册和发现。客户端服务通过注释和参数配置的方式嵌入到客户端应用程序代码中。

在运行应用程序时,尤里卡客户端向注册表注册自己的服务,并定期发送心跳来更新其服务租约。

建立服务注册中心

服务注册中心是一个独立部署的服务(你可以认为它也是一个微服务),所以你需要为它创建一个单独的项目,并在pom.xml中添加尤里卡依赖关系:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。spring-cloud-starter-eureka-server & lt;/artifactId >

& lt/dependency>。

创建春季启动应用程序:

@enable尤里卡服务器

@回弹应用

publicclassApplication{

public static void main(String[]args){

NewStringapplicationBuilder(application . class)。web(真)。run(args);

}

}

注册服务提供商

要将自己的微服务注册到尤里卡服务器,需要在服务的Spring Boot Application中添加注释@ enableddiscoveryclient,这样尤里卡服务器就可以发现该服务。

当然,pom.xml文件还需要添加相关的依赖项:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。春天-云-启动器-尤里卡<。/artifactId >

& lt/dependency>。

同时,我们还需要命名服务并指定地址。此信息可以在应用程序中配置。属性配置文件:

spring . application . name = demo-service

尤里卡. client . ServiCe URl . DefaultZone = http://localhost:1111/尤里卡/

注意:Spring建议使用yml文件来维护系统配置。yml文件能够反映配置节的层次关系,其表现力比简单的键值形式要好。

如果结合使用后面提到的Spring Cloud Config,客户端的配置文件必须命名为bootstrap.properties或bootstrap.yml

与上述配置相同的yml文件配置如下:

弹簧:

应用:

名称:演示服务

尤里卡:

客户端:

serviceUrl:

default Zone:http://localhost:1111/eureka/

服务发现和消费

在微服务架构下,许多微服务可能扮演双重角色:

一方面它是服务的提供者另一方面它又可能是服务的消费者

在尤里卡服务器中注册的微服务可能会被其他服务使用。在这一点上,它相当于在服务中创建另一个服务的客户端,并通过RestTemplate发起对该服务的调用。

为了提高性能,可以在服务的客户端引入Ribbon作为客户端负载均衡。

现在假设我们想要为演示服务创建一个服务消费者演示消费者。这个消费者也是Spring Boot微服务,可以通过尤里卡服务器注册。

此时,您需要在服务的pom.xml中添加尤里卡和Ribbon的依赖关系:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。春天-云-启动器-尤里卡<。/artifactId >

& lt/dependency>。

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。春天-云-开始-丝带& lt/artifactId >

& lt/dependency>。

然后将RestTemplate注入到主应用程序类ConosumerApplication中,并引入@LoadBalanced的注释来启动客户端负载均衡:

@EnableDiscoveryClient

@回弹应用

public class consumer application {

@豆

@负载平衡

RestTemplate restTemplate(){

returnnewRestTemplate();

}

public static void main(String[]args){

springapplication . run(consumer application . class,args)

}

}

假设使用演示服务的客户端代码是用演示服务的控制器之一编写的:

@RestController

publicclassConsumerController{

@自动连线

RestTemplate restTemplate

@ RequestMapping(value = "/demo-consumer ",method = RequestMethod。Get)

publicString helloConsumer() {

returnresttemplate . getforentity(" http://demo-service/demo ",String。类)。getBody();

}

}

RestTemplate可用于启动演示服务的消费调用。

声明性服务调用

有了Ribbon和Hystrix,可以实现微服务调用和容错保护,但Spring Cloud还提供了另一种更简单的声明式服务调用模式,即Spring Cloud假死。

假扮实际上是丝带和海斯特里克斯的进一步组合。有了假动作,我们只需要创建一个接口,并以注释的方式配置它,然后我们就可以完成接口(REST API)到服务提供者的绑定。

假设我们有三种服务:

Notification ServiceAccount ServiceStatistics Service

下图显示了服务之间的依赖关系:

要使用佯装来完成声明性服务调用,您需要在服务中创建一个客户机作为调用方。

客户端通过尤里卡服务器调用注册的对应服务,可以解耦服务。

结构如下图所示:

要使用假动作,您需要将以下依赖项添加到相应微服务的pom.xml文件中:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。春天-云-开始-假装& lt/artifactId >

& lt/dependency>。

同时,需要将@EnableFeignClients注释添加到消费的微服务应用程序中。

例如,在统计服务的应用程序类中:

@回弹应用

@EnableDiscoveryClient

@EnableFeignClients

publicclassStatisticsApplication应用程序{

public static void main(String[]args){

springapplication . run(StatisticsApplication . class,args);

}

}

由于帐户服务需要调用统计服务,因此有必要在帐户服务项目中添加相应的客户端接口:

@ FeignClient(name = " statistics-service ")

public interface statisticsserviceclient {

@RequestMapping(方法= RequestMethod。PUT,value = "/statistics/{ account name } ",consumes = MediaType。APPLICATION_JSON_UTF8_VALUE)

void updateStatistics(@ path variable(“帐户名称”)字符串帐户名称,帐户帐户);

}

StatisticsServiceClient接口的updateStatistics()方法使用/statistics/{accountName}的URI调用REST服务,并放置HTTP谓词。

此服务对应于统计服务中统计控制器类的保存统计()方法:

@RestController

publicclassStatisticsController控制器{

@自动连线

私有统计服务服务统计服务;

@ RequestMapping(value = "/{ AccountName } ",method = RequestMethod。PUT)

public void save statistics(@ path variablestring account name,@ Valid @ RequestBodyAccount account){

statisticsservice . save(account name,account);

}

}

在帐户服务中,如果您想调用统计服务,您应该通过统计服务客户端接口调用它。

例如,如果帐户服务中的Accountserviceimpl想要调用updateStatistics()方法,它可以在此类的实现中通过@autowired注入StatisticsServiceClient接口:

@服务

public class accountserviceimplemplementsaccountservice {

@自动连线

私有统计服务客户端统计客户端;

@自动连线

私有帐户存储库存储库;

@覆盖

publicvoidsaveChanges(字符串名称,帐户更新){

// ...

statistics client . updatestatistics(名称,帐户);

}

}

通知服务以同样的方式调用帐户服务。

服务容错保护

在微服务体系结构中,微服务之间可能存在依赖关系,例如,通知服务将调用帐户服务,帐户服务将调用统计服务。

在真实产品中,微服务之间的调用将会更加普遍。如果上游服务失败,可能会因为依赖关系导致失败的扩散,最终导致整个系统瘫痪。

Spring Cloud Hystrix通过实现断路器模式和线程隔离,实现服务的容错保护。

仍然参考前面的例子,系统的微服务现在包括:

上游服务:demo-service下游服务:demo-consumerEureka 服务器:eureka-server

假设上游服务可能失败,为了保证系统的健壮性,需要在下游服务中加入容错包含函数。

首先,您需要在演示消费者服务中添加对海斯特里克斯的依赖:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。spring-cloud-starter-hystrix & lt;/artifactId >

& lt/dependency>。

然后将@ enableccircuitbreaker添加到demo-consumer的应用程序类中,以打开断路器功能:

@启用断路器

@EnableDiscoveryClient

@回弹应用

public class consumer application {

@豆

@负载平衡

RestTemplate restTemplate(){

returnnewRestTemplate();

}

public static void main(String[]args){

springapplication . run(consumer application . class,args)

}

}

注意:Spring Cloud提供了注释@SpringCloudApplication来简化上面的代码。事实上,这个注释已经包含了上面三个注释。

@SpringCloudApplication注释定义如下:

@Target(ElementType。类型)

@Retention(保留策略。RUNTIME)

@已记录

@继承

@回弹应用

@EnableDiscoveryClient

@启用断路器

public @ interface pringcloud application { }

接下来,需要引入一个新的服务类来封装海斯特里克斯提供的断路器保护功能,主要定义故障发生时要执行的回调逻辑,即代码中指定的fallbackMethod:

@服务

public class consumers service {

@自动连线

RestTemplate restTemplate

@ Hystrixcommand(fallback method = " consumer all back ")

publicString consume() {

returnresttemplate . getforentity(" http://demo-service/demo ",String。类)。getBody();

}

publicString consumer all back(){

返回“错误”;

}

}

@RestController

publicclassConsumerController{

@自动连线

消费者服务消费者服务;

@ RequestMapping(value = "/demo-consumer ",method = RequestMethod。Get)

publicString helloConsumer() {

returnconsumerservice . consume();

}

}

服务监控

微服务架构将服务的粒度分解到足够精细,使得它在保证服务足够灵活和独立的同时,也带来了管理和监控方面的挑战,服务之间的依赖关系变得越来越复杂。因此,监控服务健康和运行指标非常重要。

海斯特里克斯提供仪表板用来监控海斯特里克斯的各种指示器的信息。为了监控整个系统的微服务,我们需要为Hystrix仪表板建立一个Spring Boot微服务。

在服务项目的pom文件中,添加以下依赖项:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。spring-cloud-starter-hystrix & lt;/artifactId >

& lt/dependency>。

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。spring-cloud-starter-hystrix-dashboard & lt。/artifactId >

& lt/dependency>。

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。弹簧云启动器致动器<。/artifactId >

& lt/dependency>。

该服务的应用程序类需要添加@ EnableHystrixDashboard来启用Hystrix Dashboard功能。

同时,可能需要根据实际情况修改application.properties配置文件,例如选择可用的端口号。

如果你想监控集群,你需要加入涡轮。

API网关

理论上,客户端可以直接向每个微服务发送请求。然而,这种方法有挑战性和局限性。调用者需要知道所有端点的地址,分别对每条信息执行http请求,然后将结果合并到客户端。

一般来说,针对微服务架构模式的系统采用前端和后端分离的架构。为了明确区分前端和后端的界限,我们通常可以为前端消费者定义一个更粗糙的开放服务。

这些开放服务是外部RESTful API服务,可以通过F5、Nginx等网络设备或工具实现各种微服务的路由和负载均衡,并公开给外部客户端调用(注意内部微服务之间的调用不需要经过开放服务)。

这种开放服务通常被称为边缘服务。

如果这些开放服务需要我们自己开发和实施,自己运营和维护,那么随着系统规模的不断扩大,难度会越来越大。

例如,当添加新的微服务或IP地址更改时,操作和维护人员需要手动维护这些路由规则和服务实例列表。

例如,对于所有纵向分离的微服务,都不可避免地存在交叉问题,例如用户认证、授权或签名验证。

我们不能将这些相同的功能添加到所有的微服务中,因为这将导致横切关注点的冗余。

解决办法就是引入API Gateway。它是系统通过将请求路由到适当的后端服务或调用多个后端服务并聚集结果来处理请求的单一入口点。

此外,它还可以用于身份验证、洞察、压力测试、加那利测试、服务迁移、静态响应处理和主动转换管理。

春云为API网关提供的解决方案是春云Zuul,是网飞Zuul的包装。

路由规则和服务实例维护

Zuul对路由规则和服务实例维护的解决方案是通过Spring Cloud尤里卡实现的。

API Gateway本身就是一个Spring Boot服务,注册为尤里卡服务治理下的应用,可以从尤里卡获取所有其他微服务的实例信息。

这种设计符合DRY原则,因为尤里卡维护了一套服务实例信息,Zuul无需人工干预直接重用。

对于路由规则,Zuul默认会创建路由映射,服务名为ContextPath,基本上这种路由映射机制可以满足微服务架构的路由要求。

如果需要一些特殊的配置,Zuul还允许我们自定义路由规则,我们可以通过在API网关的Application类中创建PatternServiceRouteMapper来定义自己的规则。

交叉问题

业务逻辑,如授权认证和签名验证,与微服务应用程序要处理的业务逻辑没有直接关系。我们将这些可能跨越多个微服务的函数称为“横切关注点”。这些横切关注点通常在服务方法之前和之后被称为“装饰”功能。

Spring Cloud Zuul提供了一套过滤机制,允许开发人员创建各种过滤器,并指定规则请求需要执行哪些过滤器。

自定义过滤器继承自ZuulFilter类。例如,我们要求客户端发送的请求在路由之前需要验证请求是否包含accessToken参数。

如果有路由,则拒绝它并返回401未授权错误,然后您可以定义访问过滤器类:

publicclassAccessFilterextendsZuulFilter {

privateStaticLogger log = LoggerFactory . GetLogger(AccessFilter . class);

@覆盖

publicString filterType(){

返回“pre”

}

@覆盖

publiintfilterorder(){

返回0;

}

@覆盖

public booleanShadeFilter(){

returntrue

}

@覆盖

publicObject run(){

request context CTX = request context . GetCurrentContext();

httpersvletrequest request = CTX . GetRequest();

log.info("将{}请求发送到{} ",request.getMethod(),request.getRequestURL()。toString());

object access token = request . GetParameter(" access token ");

if(accessToken == null) {

log.warn("访问令牌为空");

CTX . SetSendzuulResponse(false);

CTX . setresponsestatuscode(401);

returnnull

}

log.info("访问令牌ok ");

returnnull

}

}

为了使这个自定义过滤器生效,您还需要在Zuul服务的应用程序中创建一个具体的Bean:

@EnableZuulProxy

@SpringCloudApplication

public classzuulaapplication {

public static void main(String[]args){

newslingapplicationnbuilder(zuulaapplication . class)。web(真)。run(args);

}

@豆

public access filter access filter(){

returnNewaccessfilter();

}

}

Zuul提供四种过滤器:

pre filterrouting filterpost filtererror filter

下图来自官网,展示了客户端请求到达Zuul API网关的生命周期和过滤过程:

通过starter添加Zuul的依赖项时,包含了spring-cloud-starter-hystrix和spring-cloud-starter-ribbon模块的依赖项,所以Zuul本身具有线程隔离和断路器的服务容错功能,以及客户端负载均衡。

然而,如果我们使用路径和url之间的映射关系来配置路由规则,路由转发的请求将不会被HystrixCommand包装,因此这种路由没有服务容错和客户端负载平衡的功能。

因此,在使用Zuul时,我们应该尽可能使用path和serviceId的组合来配置路由。

分布式配置中心

为什么要引入分布式配置中心?微服务至少需要一个配置文件。如何管理分散在每个微服务中的配置文件?如果微服务采用不同的技术栈,如何统一微服务的配置?

微服务部署在不同的节点上。显然,我们不能在一台机器上管理分布式节点的配置。这就是引入Spring Cloud Config的目的。

Spring Cloud Config提供服务器和客户端支持。服务器是独立的微服,也可以在尤里卡服务器注册。

每个需要使用分布式配置中心的微服务都是Spring Cloud Config的客户端。

Spring Cloud Config的默认实现是基于Git资源库,可以通过本地Git库进行版本管理和缓存。

Spring Cloud Config不限于基于Spring Cloud开发的系统,可以用于任何语言开发的程序,支持自定义实现。

配置中心服务器

作为配置中心服务器,Spring Cloud Config Server提供以下功能:

拉取配置时更新 Git 仓库副本,保证是最新结果。支持数据结构丰富,yml,json,properties 等。配合 Eureke 可实现服务发现,配合 cloud bus 可实现配置推送更新。配置存储基于 Git 仓库,可进行版本管理。简单可靠,有丰富的配套方案。

要设置配置服务,您需要添加以下依赖项:

& lt依赖性>。

& ltgroupId>。org . spring framework . cloud & lt;/groupId>。

& ltartifactId>。spring-cloud-config-server & lt;/artifactId >

& lt/dependency>。

服务的应用程序类需要添加注释@启用配置服务器:

@回弹应用

@EnableConfigServer

publicclassConfigApplication{

public static void main(String[]args){

springapplication . run(config application . class,args);

}

}

配置服务的基本信息和Git仓库的信息放在application.yml文件中:

弹簧:

云:

配置:

服务器:

git:

uri:http://localhost/workspace/springcloud-demo

用户名:用户

密码:密码

服务器:

端口:8888

安全性:

用户:

密码:${CONFIG_SERVICE_PASSWORD}

Git库和配置服务

在Config服务中配置完Git服务器和Git库的信息后,就可以在Git库中提交配置文件了。

存储在Git库中的配置文件的名称和分支名称(默认情况下是主分支)将构成访问配置服务的URI。

假设一个服务是Notification service,它在配置中心服务器上的配置文件是notification-dev.yml,内容如下:

开发模式:真

弹簧:

应用:

名称:通知

jdbc:

主机:localhost

端口:3306

用户:root

密码:123456

日志记录:

文件:演示

配置中心客户端

需要读取配置中心服务器信息的微服务都是配置中心客户端。为了读取配置服务器信息,这些微服务需要:

在 pom 中添加对 spring-cloud-starter-config 的依赖。在 bootstrap.properties 或者 bootstrap.yml 中配置获取配置的 config-server 位置。

例如,帐户服务的配置由Spring Cloud Config管理。在其资源目录下,提供了bootstrap.yml配置文件,内容如下:

弹簧:

应用:

名称:账户服务

云:

配置:

uri: http:// config: 8888

快速失效:真

密码:${CONFIG_SERVICE_PASSWORD}

用户名:用户

请注意,配置文件不仅配置帐户服务应用程序的名称,还主要支持应用程序获取配置服务器的信息。

微服务的配置信息放入配置中心服务器的文件中,由Git库管理。

例如,帐户服务的详细配置在配置中心服务器的帐户开发yml文件中:

安全性:

oauth2:

客户端:

clientId:帐户服务

client secret:$ { ACcount _ SERVICE _ PASSWORD }

access token uri:http://auth-service:5000/uaa/oauth/token

授权类型:client_credentials

范围:服务器

弹簧:

数据:

mongodb:

主机:account-mongodb

用户名:用户

密码:${MONGODB_PASSWORD}

数据库:piggymetrics

端口:27017

服务器:

上下文路径:/帐户

端口:6000

Spring Cloud Config通过Git实现分布式配置管理。当配置中心服务器的配置信息发生变化时,作为配置客户端的每个微服务都会向Git库提交拉更新,以获取最新的配置信息。

当然,Spring Cloud Config也可以使用SVN库进行配置管理,也支持简单的本地文件系统存储。

此时,您需要将spring.profiles.active设置为native,并设置搜索配置文件的路径。如果没有配置路径,默认是在src/main/resources目录中搜索。

以下配置文件:

弹簧:

云:

配置:

服务器:

本地:

搜索位置:类路径:/shared

简介:

活动:本地

搜索路径放在类路径下的共享目录下,所以在代码中,目录是resources/shared。

如果使用本地文件系统管理配置文件,则不支持分布式配置管理和版本管理。所以生产系统推荐Git库。

总结

当实现微服务时,我们可以将微服务视为两个不同的边界:

一个是与前端 UI 的通信,称为 Open Service(Edge Service),通过引入 API Gateway 来实现与前端UI的通信。另一个是在边界内业务微服务之间的通信,通过 Feign 实现微服务之间的协作。

所有微服务都将通过尤里卡注册和发现微服务。基于Spring Cloud的典型微服务架构如下:

微服务的集成可以通过forf+Ribbon实现RESTful方式的通信,也可以基于RPC(可以结合Protocol Buffer)完成服务之间的通信,甚至通过发布事件和订阅事件的机制。

事件机制可以使微服务更加松散耦合。这时候可以引入RabbitMQ或者卡夫卡来解耦服务。

事件机制是异步的、非阻塞的,在一些业务场景中性能会更好。Spring Cloud还提供了一个相关的组件,Spring Cloud Stream,来支持这个事件机制。

对于微服务之间的协作,选择For作为REST模式、事件机制还是RPC模式,取决于业务场景需要同步模式还是异步模式;是高性能高并发,还是常用方式;一般要求完全解耦还是松耦合?

我们需要根据实际情况做出切实的判断和正确的选择。谁坏谁好没有区别,只是谁更合适。

简介:架构编码从业者,IT文艺工作者,大数据平台架构师,热爱OO和FP,热衷于学习编程语言和提高技能,致力于主流领域驱动设计与功能编程、响应编程、微服务架构的完美结合。他的个人微信微信官方账号是“伊彦”,个人博客是http://zhuayi . XYZ

来源:本文的一部分来自PiggyMetrics,并引用了与微服务和Spring Cloud相关的文档。来源:http://zhangyi.xyz/micro-service-based-on-spring-cloud/

福利来了

你认为构建微服系统的难点是什么?欢迎在底部留言讨论。边肖将选出6位信息最好的网友,并发出一本名为《春云微服务架构的实际开发》的书。活动截止时间为7月12日12: 00,特别感谢北大出版社对本次活动的图书赞助。

书籍介绍

新的。基于全新的Spring Boot 2.0和Spring Cloud Finchley。M2,这本书用简单的方式解释了春云。

实战。脱离纯理论,案例贯穿全书,微服务系统从0到1搭建,微服务从1到0拆分。读者不仅可以全面学习软件开发技能,还可以学到实际的项目经验。

全部。弥补市面上关于春云的学习资料不足,重写整个教学案例,让读者轻松脱离“Hello World”舞台,实现微服务的治理。

1.《springcloud微服务架构 如何使用Spring Cloud构建微服务架构?(文末赠书)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《springcloud微服务架构 如何使用Spring Cloud构建微服务架构?(文末赠书)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1014169.html

上一篇

大学生晚归唱世上只有妈妈好求情 究竟发生了什么?

下一篇

2021年最赚钱的行业 2021年最火的赚钱行业

网络代理软件 什么是代理服务器?代理服务器有什么作用?

网络代理软件 什么是代理服务器?代理服务器有什么作用?

代理服务器是介于浏览器和Web服务器之间的服务器。其功能是代表网络用户获取网络信息。网络信息通过代理服务器传输。更重要的是,代理服务器是互联网链路层网关提供的重要安全功能,主要工作在开放系统互连(OSI)模型的对话层。 代理服务器可以使多台没有IP地址的计算机使用其代理功能,高速、安全地访问...

dailifuwuqi 什么是代理服务器?代理服务器有什么作用?

dailifuwuqi 什么是代理服务器?代理服务器有什么作用?

代理服务器是介于浏览器和Web服务器之间的服务器。其功能是代表网络用户获取网络信息。网络信息通过代理服务器传输。更重要的是,代理服务器是互联网链路层网关提供的重要安全功能,主要工作在开放系统互连(OSI)模型的对话层。 代理服务器可以使多台没有IP地址的计算机使用其代理功能,高速、安全地访问...

adolescence 《冰上的尤里》剧场版ICE ADOLESCENCE公开,主视觉图解禁

adolescence 《冰上的尤里》剧场版ICE ADOLESCENCE公开,主视觉图解禁

今天(2018年7月1日),冰上的尤里在其官方推特和网站上发布了他的剧场版《冰上的尤里:冰上青春期》,并宣布将于2019年在日本上映。今天,其剧场版官网和部分制作阵容被披露。其制作阵容与电视动画ice上的Yuri一样,将由山本沙代监制,仍由MAPPA制作,质量值得期待。  全体职员 原案件:...

河南省地方税务局网站 【重磅】“网上办税服务厅”客户端升级“河南省网上税务局”操作方法

河南省地方税务局网站 【重磅】“网上办税服务厅”客户端升级“河南省网上税务局”操作方法

6月15日上午,在庄严的升国旗、唱国歌仪式结束后,国家税务总局河南税务局挂牌仪式在郑州举行,标志着原河南省国家税务局和河南省地方税务局正式合并。 国家税务总局河南省税务局挂牌后,原国家税务总局网上办税服务大厅更名为河南省网上税务局,实现国税地税统一入口,客户端需要升级。下面介绍一下升级前后的...

路由器的网址是什么 各种电脑系统如何查看连接路由器的登录地址是多少?

  • 路由器的网址是什么 各种电脑系统如何查看连接路由器的登录地址是多少?
  • 路由器的网址是什么 各种电脑系统如何查看连接路由器的登录地址是多少?
  • 路由器的网址是什么 各种电脑系统如何查看连接路由器的登录地址是多少?

服务器功能 防火墙的功能介绍服务器的功能

  • 服务器功能 防火墙的功能介绍服务器的功能
  • 服务器功能 防火墙的功能介绍服务器的功能
  • 服务器功能 防火墙的功能介绍服务器的功能

荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器

  • 荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器
  • 荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器
  • 荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器

华为荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器

  • 华为荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器
  • 华为荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器
  • 华为荣耀路由 荣耀路由Pro2,相当能打的平民价位的路由器