微服务架构设计实践系列之十二:开发架构

《JAVA生态圈技术总结》之 微服务架构蓝图总览 这里写目录标题一、微服务定义1.1 定义一1.2 定义二二、微服务利弊2.1 优点2.2 缺点三、微服务的适用性3.1 康威法则3.2 生产力3.3 架构演进四、服务分层五、服务注册发现六、微服务网关七、微服务配置中心八、微服务通信九、服务监控9.1 监控体系9.2 监控架构9.3 全链路监控十、断路器与流量控制十一、DevOps(云原生架构系列)十二、容器云 一、微服务定义 1.1 定义一 微服务是一种架构风格,将单体应用划分成一组小的服务,尽量符合单一职责的原则,使得服务之间相互协作,实现业务功能; 阅读详情

微服务架构设计实践
 


目    次

4.4.6  开发架构

4.4.6.1  开发架构定义

        开发架构定义了软件开发环境中,软件模块的实际组织方式,具体涉及源程序文件、配置文件、源程序包、编译后的目标文件、第三方库文件等。

        开发架构的设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。

        为了避免开发人员不按照架构进行详细设计和编程,应该重视“开发架构视图”,让开发人员看到他们最关心的“程序单元“、”源代码目录结构“等内容,这些是不同程序团队开展具体工作的基础。如果程序员们不能从架构中看到上述内容,就会认为架构是一类“高来高去“的概念,就不会有积极态度。

        从系统开发人员的角度来考虑问题,设计的架构要易于理解,易于开发,易于单元测试,最好做到让开发人员可以用最少的代码行数完成功能的开发。

        开发架构设计要达到能支持并行的详细设计。

        开发架构的设计主要完成下列工作:

        1.程序单元划分

             源文件、配置文件;

             程序库、框架;

             目标单元;

        2.程序单元组织

             项目划分;

             项目目录结构;

             编译依赖关系;

4.4.6.2  开发架构设计原则

4.4.6.2.1  模块内设计原则
 

        对于模块内的代码设计,遵循SOLID原则:

        

        1.S:单一责任原则,如果你的代码中有一个类行数太长,可能你需要重新审视一下,是不是这个类承担了过多的责任。

        2.O:开放关闭原则,对扩展开放,对修改关闭。由于对于代码的直接修改是非常危险的事情,因为你不知道这段代码原来被谁用了,因此不要贸然修改一段代码,而是选择用接口进行调用,用实现进行扩展的方式进行。

        3.L:里氏替换原则,如果基于接口进行编程,则子类一定要能够扩展父类的功能,如果不能,说明不应该继承与这个接口。例如你的实现的时候,发现接口中有一个方法在你这里实在对应不到实现,不是接口设计的问题,就是你不应该继承这个接口,绝不能出现not implemented类似之类的实现方法。

        4.I:接口隔离原则,接口不应该设计的大而全,一个接口暴露出所有的功能,从而使得客户端依赖了自己不需要的接口或者接口的方法。而是应该讲接口进行细分和提取,而不应该将太过灵活的参数和变量混杂在一个接口中。

        5.D:依赖倒置原则,A模块依赖于B模块,B模块有了修改,反而要改A,就是依赖的过于紧密的问题。这就是常说的,你变了,我没变,为啥我要改。如果基于抽象的接口编程,将修改隐藏在后面,则能够实现依赖的解耦。

4.4.6.2.2  模块间设计原则

         对于模块之间,则是采用云应用常说的十二原则,也称为云应用迁移原则。如果应用满足这12个要素,则可以比较顺利迁移到各种云平台。

        

        1.基准代码

        一份基准代码,多份部署。如果用镜像部署方式,则一个镜像可以部署到多个环境 (测试,预发,生产),而不是给每个环境制作一个不同镜像。

        2.依赖

        显式声明依赖。如果用镜像部署,则一般依赖被直接打在镜像中,或者声明在dockerfile中。

        3.配置

        在环境中存储配置。

        4.后端服务

        把后端服务 (例如缓存,数据库,MQ 等) 当作附加资源,相关配置和连接字符串通过环境变量注入,或者采用配置中心。

        5.构建、发布和运行

        严格分离构建和运行。如果使用镜像部署,则构建、发布、运行是通过镜像这种中间格式严格分离的。

        6.进程

        一个或者多个无状态的进程运行应用。容器运行时相当于进程,适用于无状态 Web/API。

        7.端口绑定

        通过端口绑定提供服务。容器也是通过端口绑定对外提供服务。

        8.并发

        通过进程模型进行扩展。容器运行时相当于进程,通过起多个容器可以任意扩展并发数量。

        9.易处理

        快速启动和优雅终止可最大化健壮性。docker 容器支持秒级启动和关闭。

        10.开发环境和线上环境等价

        尽可能保持开发、测试、预发和线上环境相同。容器可以保证容器内运行时环境的一致性,还需要保证不同环境的一致性,例如不同环境内的操作系统,负载均衡,服务发现,后台服务,监控告警等要尽可能一致。

        11.日志

        把日志当作数据流。

        12.管理进程

        后台管理任务当作一次性的进程。

4.4.6.3  开发架构实践-通用组件应用

4.4.6.3.1  代码组织结构

        

        1.后台应用

        按照模块分层进行组织,具体分为:

             公共服务模块:bcap-common-base

             总分通讯模块:bcap-common-client

             日终模块:bcap-common-dayend

             风控模块:bcap-common-riskcontrol

             自动任务调度模块:bcap-common-scheduler

             其它公共模块:bcap-common-模块名称

             系统管理模块:bcap-common-rbac;(开发环境使用,生产环境采用Tesla统一应用监控配置中心进行部署)

        2.前台控制台

        单独一个Web应用,调用后台应用提供的各种服务完成相关功能;

4.4.6.3.2  模块依赖关系

        1.bcap-common-base

        该模块为全局公共模块,其它各模块以项目依赖的方式直接引用,在类中直接import该模块下的类。

        模块依赖设置:(模块下pom.xml)

        <dependency>

<groupId>com.cmbc.bcap</groupId>

<artifactId>bcap-common-base</artifactId>

<version> ${bcap-common-version}</version>

</dependency>

        2.其它公共模块以Jar包方式、服务方式提供服务。

4.4.6.3.3  目录结构
 

        项目整体结构采用Maven的多级模块结构,本项目采用2级结构,即便于模块的分类管理,同时避免级数太多带来的代码管理方面的问题。

        

        1.一级目录:

             bcap-common-parent

        2.二级目录:

             后台应用模块:bcap-common-app

             公共服务模块:bcap-common-base

              分行服务调用客户端模块:scc-common-client

             日终模块:bcap-common-dayend

             风控模块:bcap-common-riskcontrol

             自动任务调度模块:bcap-common-scheduler

             其它公共模块:bcap-common-模块名称

             前台应用模块:bcap-common-web

4.4.6.3.3.1 公共服务模块目录:(以base模块为例)
         

        1.项目结构采用Maven默认推荐结构:

             src/main/java存放应用Java代码;

             src/main/resources存放应用配置文件;

             src/test/java存放应用测试代码;

             src/test/resources存放应用测试配置;

        2.Java代码目录层次:

        此模块为全局共用模块,主要存放全局的常量定义、工具类、全局过滤器等。

             常量类(constant):存放本模块使用的常量定义;

             工具类(util):存放本模块使用的工具类;

             过滤器(filter):存放本模块使用的过滤器类;

             其它:如果有特殊需要,可根据实际情况创建相关目录;

        3.日志配置文件:

        统一存放在src/main/resources文件夹下,名称为logback.xml。

        此为全局性的日志配置文件,在模块中不再单独需要日志配置文件。

        4.log4j或logback日志文件:

        建议预留一个磁盘空间比较大(至少50G)的磁盘专门用于存放日志文件。

        5.模块配置文件:

        统一存放在src/main/resources/META-INF/common文件夹下。

        配置文件包括,但不限于下述文件:

             datasource.xml

             security-realm.xml

4.4.6.3.3.2 其它公共模块目录:(以dayend模块为例)

         

        1.项目结构采用Maven默认推荐结构:

             src/main/java存放应用Java代码;

             src/main/resources存放应用配置文件;

             src/test/java存放应用测试代码;

             src/test/resources存放应用测试配置;

        2.Java代码目录层次:

        针对每个模块,采用Tesla通用的三层结构,具体划分为:

            1) 业务层(function):

                业务处理,在此层进行数据库事务控制;

                一个function对应一个业务功能,避免在一个function中定义多个业务功能;

                对于业务功能较多(大于等于20个业务功能)的模块,建议建立子目录,对function进行分类管理;

                对于同一个模块中功能可以进行分组管理;

            2) 服务层(manager):

                数据库组合操作,以便功能复用;

                对于function需要调用的mapper中的原子操作,也必须在manager层进行封装,即直接透传,不能在function中直接调用mapper中的功能;

            3) 数据访问层(mapper):

                数据库原子操作,例如:单表的增删改查、多表的关联查询等;

        其它目录:

        实体域(domain):数据库表对应的Java Bean;

        常量类(constant):存放本模块使用的常量定义;

        工具类(util):存放本模块使用的工具类;

        过滤器(filter):存放本模块使用的过滤器类;

        其它:如果有特殊需要,可根据实际情况创建相关目录;

        3.MessageSource配置文件:

        统一存放在src/main/resources/META-INF/模块名/messages文件夹下。

        例如:src/main/resources/META-INF/dayend/messages;

        4.MyBatis配置文件:

        统一存放在src/main/resources/META-INF/模块名/services/mapper文件夹下。

        例如:src/main/resources/META-INF/dayend/services/mapper;

        5.模块配置文件:

        统一存放在src/main/resources/META-INF/模块名/services文件夹下。

        例如:src/main/resources/META-INF/dayend/services;

        基础配置文件包括,但不限于下述文件:

             mybatis-config.xml

             security.xml

             cache-config.xml

        6.初始化数据

        统一存放在src/main/resources/initdata文件夹下。

4.4.6.4  开发架构实践-总行服务融合中心

4.4.6.4.1  代码组织结构

         

        1. 后台应用

        按照模块分层进行组织,具体分为:

            1) 公共服务:bcap-scc-common

                全局公共基础模块:bcap-scc-common-base

                其它公共服务模块:bcap-scc-common-模块名称

            2) 原子服务:bcap-scc-baseservice

                产品模块:bcap-scc-baseservice-product

                订单模块:bcap-scc-baseservice-order

                其它原子服务模块:bcap-scc-baseservice-模块名称

            3) 流程服务:bcap-scc-flowservice

                支付模块:bcap-scc-flowservice-payment

                信贷模块:bcap-scc-flowservice-credit

                其它流程服务模块:bcap-scc-flowservice-模块名称

            4) 系统管理模块:bcap-scc-rbac;(开发环境使用,生产环境采用Tesla统一应用监控配置中心进行部署)

        2.前台控制台单

        独一个Web应用,调用后台应用提供的各种服务完成相关功能。

4.4.6.4.2  模块依赖关系

        1.公共服务模块:

            1) bcap-scc-common-base

            该模块为总行服务融合中心公共模块,其它各模块以项目依赖的方式直接引用,在类中直接import该模块下的类。

            模块依赖设置:(模块下pom.xml)
                <dependency>
    <groupId>${parent.groupId}</groupId>
    <artifactId>${common-project-artifactId}</artifactId>
    <version>${parent.version}</version>

</dependency>

            2)其它公共服务模块

            公共服务模块不依赖原子服务、流程服务;

        2.原子服务模块

             支持模块热部署方式;

             原子服务模块不依赖任何其他模块,除bcap-scc-common-base外;

             各原子服务模块不对外提供服务;

             各原子服务模块之间不能互相调用;

             每个原子服务要独立完成一个完整的功能;

        3.流程服务模块

             支持模块热部署方式;

             流程服务模块依赖原子服务模块;

             各流程服务模块通过Dubbo对外提供HTTP服务,采用JSON数据格式;

             各流程服务模块通过Tesla平台提供的function-invoke调用原子服务模块提供的原子服务;

             各流程服务模块之间不能互相调用;

4.4.6.4.3  目录结构

         

        项目整体结构采用Maven的多级模块结构,本项目采用3级结构,即便于模块的分类管理,同时避免级数太多带来的代码管理方面的问题;

        1.一级目录:

             bcap-scc-parent

        2.二级目录:

             后台应用模块:bcap-scc-app

             公共服务模块:bcap-scc-common

             原子服务模块:bcap-scc-baseservice

             流程服务模块:bcap-scc-flowservice

             前台应用模块:bcap-scc-web

        3.三级目录:

            1) 公共服务目录bcap-scc-common:

                公共模块:bcap-scc-common-base

                其它公共服务模块:bcap-scc-common-模块名称

            2) 原子服务:bcap-scc-baseservice

                产品模块:bcap-scc-baseservice-product

                订单模块:bcap-scc-baseservice-order

                其它原子服务模块:bcap-scc-baseservice-模块名称

            3) 流程服务:bcap-scc-flowservice

                支付模块:bcap-scc-flowservice-payment

                信贷模块:bcap-scc-flowservice-credit

                其它流程服务模块:bcap-scc-flowservice-模块名称

4.4.6.4.3.1 公共服务模块目录:(以base模块为例)
         

        1.项目结构采用Maven默认推荐结构:

             src/main/java存放应用Java代码;

             src/main/resources存放应用配置文件;

             src/test/java存放应用测试代码;

             src/test/resources存放应用测试配置;

        2.Java代码目录层次:

        此模块为全局共用模块,主要存放全局的常量定义、工具类、全局过滤器等。

             常量类(constant):存放本模块使用的常量定义;

             工具类(util):存放本模块使用的工具类;

             过滤器(filter):存放本模块使用的过滤器类;

             其它:如果有特殊需要,可根据实际情况创建相关目录;

        3.日志配置文件:

        统一存放在src/main/resources文件夹下,名称为logback.xml。

        此为全局性的日志配置文件,在模块中不再单独需要日志配置文件。

        4.log4j或logback日志文件:

        建议预留一个磁盘空间比较大(至少50G)的磁盘专门用于存放日志文件。

        5.模块配置文件:

        统一存放在src/main/resources/META-INF/common文件夹下。

        配置文件包括,但不限于下述文件:

             datasource.xml

             security-realm.xml

4.4.6.4.3.2 原子服务模块目录:(以pe模块为例)
         

        1.项目结构采用Maven默认推荐结构:

             src/main/java存放应用Java代码;

             src/main/resources存放应用配置文件;

             src/test/java存放应用测试代码;

             src/test/resources存放应用测试配置;

        2.Java代码目录层次:

        针对每个模块,采用Tesla通用的三层结构,具体划分为:

            1) 业务层(function):

                业务处理,在此层进行数据库事务控制;

                一个function对应一个业务功能,避免在一个function中定义多个业务功能;

                对于业务功能较多(大于等于20个业务功能)的模块,建议建立子目录,对function进行分类管理;

                对于同一个模块中功能可以进行分组管理;

            2) 服务层(manager):

                数据库组合操作,以便功能复用;

                对于function需要调用的mapper中的原子操作,也必须在manager层进行封装,即直接透传,不能在function中直接调用mapper中的功能;

            3) 数据访问层(mapper):

                数据库原子操作,例如:单表的增删改查、多表的关联查询等;

            其它目录:

             实体域(domain):数据库表对应的Java Bean;

             常量类(constant):存放本模块使用的常量定义;

             工具类(util):存放本模块使用的工具类;

             过滤器(filter):存放本模块使用的过滤器类;

             其它:如果有特殊需要,可根据实际情况创建相关目录;

        3.MessageSource配置文件:

        统一存放在src/main/resources/META-INF/模块名/messages文件夹下。

        例如:src/main/resources/META-INF/pe/messages;

        4.MyBatis配置文件:

        统一存放在src/main/resources/META-INF/模块名/services/mapper文件夹下。

        例如:src/main/resources/META-INF/pe/services/mapper;

        5.模块配置文件:

        统一存放在src/main/resources/META-INF/模块名/services文件夹下。

        例如:src/main/resources/META-INF/pe/services;

        基础配置文件包括,但不限于下述文件:

             mybatis-config.xml

             security.xml

             cache-config.xml

        6.初始化数据

        统一存放在src/main/resources/initdata文件夹下。

4.4.6.4.3.3 流程服务模块目录:(以payment模块为例)

         

        1. 项目结构采用Maven默认推荐结构:

             src/main/java存放应用Java代码;

             src/main/resources存放应用配置文件;

             src/test/java存放应用测试代码;

             src/test/resources存放应用测试配置;

        2.Java代码目录层次:

        由于流程服务模块主要是根据需求对原子服务进行流程编排,所以在本模块只有function层,在function中进行服务流程的调用。

            1) 业务层(function):

                业务流程调用;

                一个function对应一个服务流程,避免在一个function中定义多个服务流程;

                对于服务流程较多(大于等于20个服务流程)的模块,建议建立子目录,对function进行分类管理;

                对于同一个模块中服务流程可以进行分组管理;

            其它目录:

             工具类(util):存放本模块使用的工具类;

             其它:如果有特殊需要,可根据实际情况创建相关目录;

        3.MessageSource配置文件:

        统一存放在src/main/resources/META-INF/模块名/messages文件夹下。

        例如:src/main/resources/META-INF/payment/messages;

        4.模块配置文件:

        统一存放在src/main/resources/META-INF/模块名/services文件夹下。

        例如:src/main/resources/META-INF/payment/services;

        基础配置文件包括,但不限于下述文件:

             channel-config.xml

             dubbo-config.xml

             security.xml

             security-client.xml

             serviceflow-config.xml

        5.服务编排流程文件

        统一存放在src/main/resources/sflowDiagram文件夹下。

        如果服务编排流程文件大于等于20个,可以参考function分类规则,在sflowDiagram目录下按照类别创建子目录进行分类管理。

        6.初始化数据

        统一存放在src/main/resources/initdata文件夹下。

4.4.6.5  开发架构实践-分行特色应用

        以北京分行为例(bcap-bj)。

4.4.6.5.1  代码组织结构

         

        1. 后台应用

        按照模块分层进行组织,具体分为:

             公共服务模块:bcap-bj-base

             贷款模块:bcap-bj-loan

             其它模块:bcap-bj-模块名称

             系统管理模块:bcap-bj-rbac;(开发环境使用,生产环境采用Tesla统一应用监控配置中心进行部署)

        2. 前台控制台

        单独一个Web应用,调用后台应用提供的各种服务完成相关功能。

4.4.6.5.2  模块依赖关系

        1.bcap-bj-base

        该模块为公共模块,其它各模块以项目依赖的方式直接引用,在类中直接import该模块下的类。

        模块依赖设置:(模块下pom.xml)
                <dependency>
    <groupId>${parent.groupId}</groupId>
    <artifactId>${common-project-artifactId}</artifactId>
    <version>${parent.version}</version>

        </dependency>

4.4.6.5.3  目录结构

         

        项目整体结构采用Maven的多级模块结构,本项目采用2级结构,即便于模块的分类管理,同时避免级数太多带来的代码管理方面的问题。

        1. 一级目录:

             bcap-bj-parent

        2. 二级目录:

             后台应用模块:bcap-bj-app

             公共服务模块:bcap-bj-base

             贷款模块:bcap-bj-loan

             其它模块:bcap-bj-模块名称

             前台应用模块:bcap-bj-web

4.4.6.5.3.1 公共服务模块目录:

        参考《公共服务模块目录:(以base模块为例)》;

4.4.6.5.3.2 其它模块目录: 

        参考《原子服务模块目录:(以pe模块为例)》;

4.4.6.6  命名规则

        1.项目名称:

            1) 对前后台分开场景:以bcap-scc项目名称为例。

                前台应用:bcap-scc-web;

                后台应用:bcap-scc-app;

            2)公共服务模块:

                统一异常处理模块:bcap-scc-common-base;

                其它公共服务模块:bcap-scc-common-模块名

            3) 原子服务模块:

                订单模块:bcap-scc-baseservice-order;

                其它原子服务模块:bcap-scc-baseservice-模块名称

            4) 流程服务模块:

                支付模块:bcap-scc-flowservice-payment;

                其它流程服务模块:bcap-scc-flowservice-模块名称

        2.公共服务模块包名:(以base为例)

             Function:com.cmbc.bcap.scc.common.base.function

             Manager:com.cmbc.bcap.scc.common.base.manager

             Mapper:com.cmbc.bcap.scc.common.base.mapper

             domain:com.cmbc.bcap.scc.common.base.domain

             util:com.cmbc.bcap.scc.common.base.util

             constant:com.cmbc.bcap.scc.common.base.constant

             filter:com.cmbc.bcap.scc.common.base.filter

        3.原子服务模块包名:(以订单模块order为例)

             Function:com.cmbc.bcap.scc.baseservice.order.function

             Manager:com.cmbc.bcap.scc.baseservice.order.manager

             Mapper:com.cmbc.bcap.scc.baseservice.order.mapper

             domain:com.cmbc.bcap.scc.baseservice.order.domain

             util:com.cmbc.bcap.scc.baseservice.order.util

             constant:com.cmbc.bcap.scc.baseservice.order.constant

             filter:com.cmbc.bcap.scc.baseservice.order.filter

        4.流程服务模块包名:(以支付模块payment为例)

             Function:com.cmbc.bcap.scc.flowservice.payment.function

             util:com.cmbc.bcap.scc.flowservice.payment.util

        5.Function实现类名称:

            业务功能名称+Function.java

            如业务功能为订单查询,则对应的function名称为OrderQueryFunction;

            注意:Function必须采用注解方式开发;

        6.Manager类名称:

            服务名称+Manager.java

            如服务为客户账单服务,则对应的manager名称为ClientAccountManager.java;

        7.Domain类名称:

            实体名.java

            如实体名为user,则对应的实体域名称为User.java;

        8.Util类名称:

            功能描述+Util.java

            如日期格式转换工具类,则对应的工具类名称为DateFormatUtil.java;

        9.常量类名称

            常量类别+Constant.java

            如错误码类型常量,则对应的常量类名称为ErrorCodeConstant.java;

        10.MyBatis中Mapper名称:

            1) Mapper接口类名称:

                实体名+Mapper.java;

                例如:UserMapper.java;

            2) Mapper接口类的方法名称:

                   select、insert、update、delete方法分组定义,按顺序定义不能混乱;

          方法名要能明确看出DB操作的含义,统一按照select+xxx+By+yyy或select+xxx+List+By+yyy或select+xxx+withRS、insert+xxx、update+xxx、delete+xxx+By+yyy。(xxx为实体名,yyy为条件描述,多重条件用简称描述);

                    接口类中方法要有功能说明,描述DB操作的功能;

            3) Mapper配置文件名:

                实体名+Mapper.xml,和接口类名称对应;

                例如:UserMapper.xml;

            4) Mapper配置XML文件中配置项名:

               同接口定义,select、insert、update、delete分组并按顺序定义,且按照接口方法的顺序在XML中定义;

               <select></select>、<insert></insert>、<update></update>、<delete></delete>的id名称与接口中方法名相同;

               <sql></sql>共享列定义id名称遵循:定义列为表的部分字段时为simple+xxx+Columns、定义列为表的所有字段时为full+xxx+Columns、定义列为表与其他表关联时为xxx+join+yyy+Columns。(xxx为主实体名、yyy为关联实体名)

               <resultMap></resultMap>返回结果映射定义id名称遵循:返回结果为表的部分字段时为simple+xxx+ResultMap、返回结果为表的所有字段时为full+xxx+ResultMap、返回结果为表与其他表关联时为xxx+join+yyy+ResultMap。(xxx为主实体名、yyy为关联实体名)

               <sql></sql>和<resultMap></resultMap>定义在XML的最前面,后面再开始定义<select></select>、<insert></insert>、<update></update>、<delete></delete>;

            5) MessageSource配置文件名:

                实体名-message-source-zh_CN.properties

            6) MessageSource文件中配置项Key名称: 

                function名称.消息码,统一小写;

                例如:queryUserDetail.userid_not_exist;


  微信扫一扫,关注该公众号

  该系列文章已经在微信公众号发布,如果感兴趣,请关注。

   以后更多知识通过该微信公众号分享。


阿里资深架构师深度解析Spring微服务架构设计第2版文档 前言 微服务是一种架构风格和模式:将复杂系统拆解为协同工作的小型服务,以此构建大型业务服务。微服务是自治、自包含且可独立部署的服务。当今世界上的许多企业将微服务作为默认的架构标准来构建面向服务的大型企业级应用。 作为一种编程框架,Spring框架在开发者社区流行很多年了。使用SpringBoot不再需要重量级应用容器,并且它还支持部署轻量级无服务器应用。 Spring Cloud结合了Netflix的许多OSS开源组件,提供了一个运行和管理大型微服务架构的生态系统;还支持负载均衡、服务注册、服务监控和 阅读详情

相关推荐

【新版系统架构】第十四章-云原生架构设计理论与实践

软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版)

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 1519

软件架构的演变过程

文章目录1. 什么是软件架构2. 架构的分类3. 软件架构演变过程3.1单体架构(all in one)3.1.1优点3.1.2缺点3.2分布式架构(垂直架构)3.2.1特点3.2.2优点:3.2.3缺点:3.3SOA架构3.3.1特点3.3.2优点3.3.3缺点3.4微服务架构3.4.1特点3.4.2优点3.4.3缺点3.4.3缺点 1. 什么是软件架构 单体项目的尴尬之处:当项目中的某个模块的使用人数激增,例如618当天,下单的人数一定会非常多,但是因为下单和评论、售后是同一个项目,会导致下单卡

qq_54199667的博客 1558

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 583

分布式服务器框架之Server.Common中通过Xml配置渠道、服务器集群、热更新信息代码解析Xml缓存进内存

分布式服务器Server.Common中通过Xml配置渠道、服务器集群、热更新信息_代码解析Xml缓存进内存

qq_33531923的博客 415

中文实体关系抽取数据集大盘点:从百度Duie2.0到医疗CBLUE,哪个更适合你的NLP项目?

本文全面分析了中文实体关系抽取领域的主流数据集,包括百度DuIE 2.0、医疗CBLUE等,帮助开发者根据项目需求选择最适合的数据集。文章详细对比了各数据集的特点、适用场景及优化策略,为自然语言处理项目提供实用指南。

weixin_29284657的博客 121

《UVM实战》学习笔记——第三章UVM基础

uvm基础,常见的派生类,config db机制,打印信息等

qq_42135020的博客 5176

逻辑架构和物理架构

在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的人感觉很神秘,甚至是高深莫测。很少有人对“架构”有全面的了解和认识能并说清楚架构是什么,更谈不上掌握了。事实上,也只有极少数人能成为或者被冠以“架构师”这样的title。为此,笔者总结了对架构的一些理解,希望能够补充很多初入门的人在这方面认识上的不足,纠正一些误解。高手和老鸟就直接跳过吧。 架构的分...

weixin_30788731的博客 1417

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 454

开发框架是什么?

开发框架是什么?今天,我们就一起来聊聊这个话题。

Gzlcxxjs的博客 7607

FreeRTOS的学习(十四)——PendSV异常

本文将从任务切换的角度出发,学习PendSV异常的相关概念。

LEOD的博客 1729

AI人工智能领域持续学习:提升技术能力的关键

在当今科技飞速发展的时代,AI人工智能已经渗透到我们生活的方方面面。本文章的目的就是帮助大家了解在AI人工智能领域持续学习的重要性,以及如何通过持续学习来提升自己的技术能力。文章会涵盖AI的核心概念、持续学习的原理和方法、实际应用场景等方面,让大家对AI领域的持续学习有一个全面的认识。本文首先会介绍AI人工智能的核心概念,让大家对这个领域有一个初步的了解。然后详细讲解持续学习的原理和方法,通过代码示例展示如何在实际项目中实现持续学习。接着会分析AI持续学习在不同场景的应用,推荐一些学习工具和资源。

AI 原生应用开发的博客 1289

Android MVC MVP MVVM模式

本篇介绍了 架构模式的含义,回顾和比较了Android中的架构模式MVC、MVP、MVVM,最后在 Jetpack架构组件 基础上 介绍了 MVVM 的详细实现方法、注意点,以及MVP的改造。整篇下来,基本很简单容易理解的。例子是很简单的,所以在实际开发中 需要深入理解 MVVM 数据驱动的本质,和MVP的区别。......

weixin_42190533的博客 894

CKS-CN考试之路----11

显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本.

Q先生 652

【总结】我的十二个架构设计原则

谨记 没有最好的架构,只有最适合的架构 好的架构不是设计出来的,是演进变化而来的 每一位架构师,在做架构设计时,都或多或少地会有一些自己架构设计原则。这里和你分享一些过去一直指导我的一些架构设计原则,希望对你有用。 我的十二个架构设计原则 1、N+1设计 系统中的每个组件都应做到没有单点故障 2、回滚设计 确保系统可以向前兼容,在系统升级时应能有办法回滚版本 3、禁用设计 应该提...

Think Different 2955

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 839

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

系列开篇|云原生时代下微服务架构进阶之路

云原生时代,很多新兴技术和实践不断涌现,而企业用户在实现云原生之旅的时候常常面临诸多新兴开源技术不知如何选择,或者有了技术堆栈但是具体落地执行困难重重的局面;这其中,尤其是微服务的技术堆栈选择和落地实现往往是其中的焦点问题。 VMware 是业界知名的云原生领域的技术领导力厂商,在近些年服务了大量企业用户成功地实现了微服务应用实现和落地。 《云原生时代下微服务架构进阶之路》系列文章,就是和读者一起分享, VMware 在相关领域的成功实践经验,和作者的技术洞察。 微服务这个词相信大家早已经耳熟能详了,对于微

VMware中国研发中心 892

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

手慢无!清华大牛熬夜整理Spring微服务架构设计第2版文档,限时删

前言 微服务是一种架构风格和模式:将复杂系统拆解为协同工作的小型服务,以此构建大型业务服务。微服务是自治、自包含且可独立部署的服务。当今世界上的许多企业将微服务作为默认的架构标准来构建面向服务的大型企业级应用。 作为一种编程框架,Spring框架在开发者社区流行很多年了。使用SpringBoot不再需要重量级应用容器,并且它还支持部署轻量级无服务器应用。 Spring Cloud结合了Netflix的许多OSS开源组件,提供了一个运行和管理大型微服务架构的生态系统;还支持负载均衡、服务注册、服务监控和

JavaJIAMIN的博客 1843

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

你必须了解的微服务架构设计的10个要点!

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。更多JVM面试整理:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!更新的新技术了。[外链图片转存中…(img-WobEa8T7-1713520211853)]

2401_84046876的博客 1126

什么是微服务?一看就会系列!

近年来随着互联网的快速发展,尤其是移动互联网以及云计算的迅猛发展,对于软件交付与迭代速度和效率的要求在不断提高。微服务架构凭借其简单清晰、灵活可扩展、独立部署等优势,越来越成为了分布式架构中的主流。现在微服务成了面试的必备知识,感觉不会微服务真的很难找工作!一直在热点上的微服务到底是什么?那本篇文章就从它的演变过程来了解它。 一、微服务架构的演变 微服务是一种服务间松耦合的、每个服务之间高度自治并且使用轻量级协议进行通信的可持续集成部署的分布式架构体系。这一句包含了微服务的特点,微服务架构和...

weixin_38007185的博客 7041

京东技术专家首推:Spring 微服务架构设计,GitHub 星标 128K

本书提供了实现大型响应式微服务的实用方法和指导原则,并通过示例全面 讲解如何构建微服务。本书深入介绍了 Spring Boot、Spring Cloud、 Docker、Mesos 和 Marathon,还会教授如何用 Spring Boot 部署自治服务,而 无须使用重量级应用服务器,并介绍 Spring Cloud 框架的各项能力、如何使 用 Docker 实现容器化,以及如何使用 Mesos 和 Marathon 抽象出计算资源和控制 整个集群。

weixin_64314555的博客 625

【软件架构】软件的十二种架构简介

微内核架构区分了基本的系统功能和可扩展的应用功能,核心系统提供最基本的操作,而其他功能则通过插件或模块的形式添加。这种架构的关键在于一个小型的内核负责提供最基础和通用的功能(如低级内存管理、设备驱动等),而更高级的功能(如用户界面、应用程序等)则作为独立的组件或服务存在,这些组件在运行时与微内核通信。在选择架构时,重要的是要根据项目的具体需求、团队的能力、预期的系统规模和性能要求来决定最适合的架构模式。每种架构风格都有其优势和局限性,选择哪一种架构取决于具体的项目需求、团队的技能以及系统未来的发展方向。

weixin_46453070的博客 1万+

终于有架构师把Spring微服务架构设计第2版文档给整理完毕了

前言 微服务是一种架构风格和模式:将复杂系统拆解为协同工作的小型服务,以此构建大型业务服务。微服务是自治、自包含且可独立部署的服务。当今世界上的许多企业将微服务作为默认的架构标准来构建面向服务的大型企业级应用。 作为一种编程框架,Spring框架在开发者社区流行很多年了。使用SpringBoot不再需要重量级应用容器,并且它还支持部署轻量级无服务器应用。 Spring Cloud结合了Netflix的许多OSS开源组件,提供了一个运行和管理大型微服务架构的生态系统;还支持负载均衡、服务注册、服务监控和

代码界的扛把子 224

微服务架构学习系列

一、定义要点 1、一组小的服务 2、独立的进程 3、轻量级通信 4、基于业务能力 5、独立部署 6、无集中式管理 二、利弊 利 1、强模块化边界 2、可独立部署 3、技术多样性 弊端 1、分布式复杂性 2、最终一致性 3、运维复杂些 4、测试复杂性 三、康威法则和微服务架构 企业结构等于系统设计 1、在应用项目后期加大人员的投资,会更加拖慢它的速度。——Fre...

每天进步一点点儿 1612

终于有人把Spring微服务架构设计给大家一次性讲明白了!

微服务是一种架构风格和模式:将复杂系统拆解为协同工作的小型服务,以 此构建大型业务服务。微服务是自治、自包含且可独立部署的服务。当今世 界上的许多企业将微服务作为默认的架构标准来构建面向服务的大型企业级 应用。作为一种编程框架,Spring框架在开发者社区流行很多年了。使用Spring Boot不再需要重量级应用容器,并且它还支持部署轻量级无服务器应用。Spring Cloud结合了Netflix的许多OSS开源组件,提供了一个运行和管理大 型微服务架构的生态系统;

程序员高级码农的博客 753
上一篇: 微服务架构设计实践系列之九:应用架构
下一篇: 微服务架构设计实践系列之十一:物理架构
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任性之闲来无事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值