后台服务架构小结

Posted citi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台服务架构小结相关的知识,希望对你有一定的参考价值。

前言

在互联网团队中,产品关注用户体验和产品价值、算法关注算法准确度、前端UI关注用户交互页面展示,而后台工程师关注点更偏重于服务架构和业务实现。

本文谈谈什么是(后台)服务架构,什么是好的服务架构,服务架构的目的是什么?

什么是服务架构

系统架构是定义系统的结构、行为及其他视图(view)的概念模型。

软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。

后台服务架构是软件架构的一种,是针对后台服务的架构。

(后台)服务架构的目的

本文讨论的是针对后台的后台服务架构。后续简称服务架构。

服务架构的目的,是让企业、团队、部门提供的后台服务具备高可用、高扩展、高性能、可观察等4个方面的能力。从而降低运维成本、降低新需求开发成本、保障用户体验、提升用户幸福感。也是一个公司、技术团队管理能力、专业能力、技术实力的体现。打造口碑和影响力。

服务架构的4个目的

高可用

高可用一般是服务架构的底线要求。

我把高可用分为两类,一是服务治理,二是服务容灾。两把刀相辅相成,不是完全独立的。高可用与其他几个目的的保障措施也是相辅相成的。举个例子,服务的服务器发生单机问题,服务应有自动的容错机制,重试机制(服务容灾),并且在负载均衡上及时摘除问题节点(服务治理),同时通过监控指标及告警,及时周知负责人或运维(可观察)。服务的用户对于底层发生的单机问题几乎是无感知的。

有大量的文章,对服务治理、服务容灾有详细的介绍。我在这里不展开这些,单独记录一下对于服务健康检查的认识。服务可用性是指服务保持稳定态占整个时间周期的比率。可靠性指的是服务启动后直到第一次故障的时长,越长越好。服务可用可以等价理解为服务健康。那么服务健康检查,对于服务的可用性保障是十分关键的。

服务健康检查的实现可以是一个返回服务是否健康的接口,可以间隔上报心跳,可以自行实现,也可借助框架(比如spring acutator中的health entry point)。实现了健康检查机制后,在服务注册、负载均衡、坏点发现与摘除上便有了一个精确有效的指标。从而大大提高服务在新部署接流、单机故障时的可用性。

高扩展

扩展性应该总体分两个方面描述,横向扩展和纵向扩展。

横向扩展

个人认为,横向扩展可以理解为 “集群化”,将当前使用的底层资源,以同样的规格进行“复制”,从而使资源成倍的增长。当下云时代的容器化,可以算是横向扩展能力的终极表现。服务要具备良好的横向扩展的能力,最好有以下特点:

  1. 无状态化。所有数据、逻辑不依赖本地。
  2. 存储的有效拆分。按照业务逻辑垂直拆分表,水平拆分、分库分表。
  3. 使用分布式配置中心进行配置。
  4. 容器化。

纵向扩展

纵向扩展可以理解为,升级机器,把原来奔腾处理器、512M内存的服务器,升级为至强处理器,128G内存的服务器。这个对服务本身对于算力资源是有要求的,服务本身算力不行,并发做的不好,再大的CPU、再大的内存也利用不起来。

高性能

高性能核心可以分为并发、缓存、预热

并发好理解,充分利用现代处理器甚至是GPU异构处理器多核并发的能力。在服务内使用高并发的框架同时处理海量请求。并发要注意并发安全问题。

缓存,是对热点数据的尊重,是二八定律在计算机领域的体现。计算机本身硬件数据存储的设计就是多级缓存模式的,从慢到快分为硬盘、内存、多级高速缓存、寄存器。服务使用缓存的姿势,可以有内存缓存、分布式缓存(redis、memcache)、CDN等。

预热,在服务正式提供服务之前,冷启动之后,进行系统预热,从而使服务正式提供服务时,已经过了“磨合期”。常见的方式有压测预热、接口覆盖调用、流量逐步放大等。

可观察

可观察性(Observability)在敏捷开发DevOps(开发运营),SRE中相当重要。另一方面,其对于老板的重要程度也特别高。领导层对于系统的认知除了亲自体验产品、查看用户反馈,剩下最重要的途径就是通过系统的各项指标。比如服务的SLA、性能数据、底层资源使用率等来衡量公司是否在低成本、高效率、高稳定的为用户提供服务。

后台架构拓展内容

软件架构模式

软件架构入门 - 阮一峰的网络日志

大型网站技术架构演进 

​​​​​​​10张图带你了解后台服务架构演变_极客猴的博客-CSDN博客

 服务发现

百度安全验证​​​​​​​

 架构定义

架构基本概念和架构本质 - samdyli - 博客园

引用

https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84

网站架构高可用小结

对于一个网站而言,最重要的事情就是保证网站一直“可用”,也就是能够被访问到,

先不管你可以支持多少并发,也不要管后台数据的收集和整理有没有很成熟,首先不论怎样你都必须网站可用。

在前面我们已经阐述了网站高可用的一些手段,下面会进行一些整体的论述。

 

怎样来阐述一个网站的可用性手段了?

我们应该依据网站的架构,一次从前往后来进行阐述,也就是应用层、服务层和数据层,最后在阐述一些综合性的问题。

 

1.应用高可用

我们知道应用是无状态的,应用层应该只对请求做逻辑处理。

首先我们保证其高可用的手段就是负载均衡,集群中的某一台不能被访问的时候,访问的请求应该能够被转移到其他的服务器上。

还有一个需要注意的是session处理,如果保证用户的Session信息的一致性,之前我们一共介绍了4中手段,

分别是Session复制、Session绑定、写入Cookie、Session集群。

能做进行应用负载均衡的手段有很多,一般是软件和硬件两个方面的,软件的有Nginx、Haproxy等

而专门做高可用的有keepalive。

 

2.服务高可用

服务层是进行具体的访问的处理,在这里服务器会针对不同的请求做不不同的回应,

保证服务高可用依然最基本的手段是负载均衡,其次还有一些其他的手段,

比如:分级管理、超时设置、异步调用、服务降级和幂等性设计。

 

3.数据高可用

对于许多网站而言,数据是其最宝贵的的财产尤其是在这个大数据的时代,

首先要说明CAP原理:数据可用性、数据一致性、分区耐受性(可访问性)无法得到同时满足。

保证数据高可用的手段主要是:数据备份和失效转移机制。

数据备份有异步热备方式和同步热备方式。失效转移有失效确认、访问转移、数据恢复三步。

 

4.软件质量保证

如何保证软件的可用性方面也有一些需要注意的方面:

网站发布、自动化测试、预发布验证、代码控制、灰度发布等

 

以上是关于后台服务架构小结的主要内容,如果未能解决你的问题,请参考以下文章

大型网站技术架构小结

微服务原理学习小结

网络编程小结

简单的高性能后台架构

后台应用架构(单体SOA微服务)理解

从无到有搭建中小型互联网公司后台服务架构与运维架构