架构

架构满足了应用程序的非功能性需求:可维护性、可测试下、可扩展性、可部署性等。

架构的分类:

  • 基础架构 以云平台 操作系统等基础设施为主
  • 中间件与大数据架构
  • 业务系统架构
    • 通用软件系统 办公软件 浏览器等一类
    • 离线业务系统 大数据分析 数据挖掘系统
    • 在线业务系统 在线为特定业务服务的系统

这些不同分类的架构界限不是很清晰 随着时间演进 各个类型之间的系统边界会互相渗透

架构视图:

屏幕截图 2021-01-18 170117

架构的演进

站在后端开发人员的角度上软件架构风格从大型机(Mainframe),到原始分布式(Distributed),到大型单体(Monolithic),到面向服务(Service-Oriented),到微服务(Microservices),到服务网格(Service Mesh),到无服务(Serverless)

谈起微服务,会想到技术异构,便于部署,高性能等等,但这些似乎都只是锦上添花,架构的核心在于解决软件的存活问题,如果一个软件压根就不能提供服务,这些锦上添花的功能也毫无作用

架构的目标

用最小的人力成本来满足构建和维护该系统的需求

  • 乱麻系统

过度的自信导致软件维护成本持续上升

两个维度

  • 行为价值
    • 让系统正常运行
  • 架构价值
    • 让系统更容易修改

四种架构模式

  • 按层封装

也就说传统的水平分层架构,在项目初期很合适

package controller{
    Controller;
}
package service {
    Service;
    ServiceImpl;
}
package dao {
    Dao;
}
  • 按功能封装

即垂直切分

package Order {
    OrderController;
    OrderService;
    OrderDao;
}
  • 端口与适配器
package controller{...}

package domain {
    Service;
    ServiceImpl;
    Domain;
}

package dao{...}
  • 按组件封装

优点服务架构的味道

package controller {...}
package order {
    Service;
    Dao;
}

COLA

分层

批注 2020-06-26 092443

扩展设计

在系统设计时,针对业务或者场景预留一些扩展点

具体技术下的架构

  • 单体架构:Spring Boot

使用传统的分层,打成一个jar包 运行它

20201027154734

  • 微服务:Spring Cloud

高可用 高性能等需求使我们不得不对系统进行拆分,在前面的单体架构下,分成多个工程 业务代码与服务基础设施代码耦合在一起 构成了传统的微服务,也是目前最流行的架构

20201027154755

  • 微服务:K8S

在传统的微服务下,基础设施代码与业务代码耦合在一起,这个阶段下使用了K8S的容器基础设施来完成大部分服务治理功能,应用程序可以更专注我们的业务

20201027154819

  • 服务网格:Istio

K8S将服务治理沉淀到基础设施只是第一步,接下来服务网格将这事做的更加彻底,更加可管理 可观测

20201027154819

  • 另外一条支线:无服务

上传代码,某些事件会触发你的代码运行它,彻底不用管理基础设施,一切交给云

results matching " "

No results matching " "

results matching " "

No results matching " "