后台服务架构小结
Posted citi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台服务架构小结相关的知识,希望对你有一定的参考价值。
前言
在互联网团队中,产品关注用户体验和产品价值、算法关注算法准确度、前端UI关注用户交互页面展示,而后台工程师关注点更偏重于服务架构和业务实现。
本文谈谈什么是(后台)服务架构,什么是好的服务架构,服务架构的目的是什么?
什么是服务架构
系统架构是定义系统的结构、行为及其他视图(view)的概念模型。
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。
后台服务架构是软件架构的一种,是针对后台服务的架构。
(后台)服务架构的目的
本文讨论的是针对后台的后台服务架构。后续简称服务架构。
服务架构的目的,是让企业、团队、部门提供的后台服务具备高可用、高扩展、高性能、可观察等4个方面的能力。从而降低运维成本、降低新需求开发成本、保障用户体验、提升用户幸福感。也是一个公司、技术团队管理能力、专业能力、技术实力的体现。打造口碑和影响力。
服务架构的4个目的
高可用
高可用一般是服务架构的底线要求。
我把高可用分为两类,一是服务治理,二是服务容灾。两把刀相辅相成,不是完全独立的。高可用与其他几个目的的保障措施也是相辅相成的。举个例子,服务的服务器发生单机问题,服务应有自动的容错机制,重试机制(服务容灾),并且在负载均衡上及时摘除问题节点(服务治理),同时通过监控指标及告警,及时周知负责人或运维(可观察)。服务的用户对于底层发生的单机问题几乎是无感知的。
有大量的文章,对服务治理、服务容灾有详细的介绍。我在这里不展开这些,单独记录一下对于服务健康检查的认识。服务可用性是指服务保持稳定态占整个时间周期的比率。可靠性指的是服务启动后直到第一次故障的时长,越长越好。服务可用可以等价理解为服务健康。那么服务健康检查,对于服务的可用性保障是十分关键的。
服务健康检查的实现可以是一个返回服务是否健康的接口,可以间隔上报心跳,可以自行实现,也可借助框架(比如spring acutator中的health entry point)。实现了健康检查机制后,在服务注册、负载均衡、坏点发现与摘除上便有了一个精确有效的指标。从而大大提高服务在新部署接流、单机故障时的可用性。
高扩展
扩展性应该总体分两个方面描述,横向扩展和纵向扩展。
横向扩展
个人认为,横向扩展可以理解为 “集群化”,将当前使用的底层资源,以同样的规格进行“复制”,从而使资源成倍的增长。当下云时代的容器化,可以算是横向扩展能力的终极表现。服务要具备良好的横向扩展的能力,最好有以下特点:
- 无状态化。所有数据、逻辑不依赖本地。
- 存储的有效拆分。按照业务逻辑垂直拆分表,水平拆分、分库分表。
- 使用分布式配置中心进行配置。
- 容器化。
纵向扩展
纵向扩展可以理解为,升级机器,把原来奔腾处理器、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微服务)理解
从无到有搭建中小型互联网公司后台服务架构与运维架构