网站架构

大型网站技术架构演进与性能优化(九)九、网站高可用建设:大型网站的稳定性建设

妖精的绣舞 提交于 2020-02-07 01:25:03
九、网站高可用建设:大型网站的稳定性建设 稳定性是决定网站生死的命脉 1、故障带来的影响 导致极差的用户体验、严重影响公司声誉 2、网站的可用性指标 网站可用性即网站正常运行时间的百分比,业界用N个9来量化可用性,最常说的是“4个9(99.99%)”。 网站可用性如果对达到4个9基本上就算及格了,即网站一年的不可用时间不超过52分钟。为了保障整个网站的全部服务完全不出错,有必要对服务进行分级,以保障服务的高可用性。 3、稳定性建设思路 稳定性的建设,有两个重要因素:一是思想上重视,开发人员对稳定性的重视可以避免70%-80%的故障;二是规范和工具的建设,用以保障稳定性。 架构阶段的稳定性建设项目:避免单点、分组隔离、异地容灾。 编码阶段的稳定性建设:错误捕获、异步线程、超时处理、限流保护。 测试阶段的稳定性建设:自动化对比测试、Beta测试。 发布阶段的稳定性建设:分批发布、多版本发布。 运行阶段的稳定性建设:实时监控报警、过载保护和自动降级、实时数据对账。 故障发生时的稳定性建设:故障定位、快速恢复。 4、高可用体系化建设 包括压测体系、管控体系、监控体系、恢复体系和度量体系。 压测体系:分为单系统压测和全链路压测。 全链路压测的技术难度并不大,技术手段主要由流量的制造、流量的标记、测试数据的处理。 管控体系主要是遇到一些异常情况时提供保护系统的措施,包括开关系统、预案系统

大型网站技术架构演进与性能优化(五) 五、应用程序优化:代码级优化

∥☆過路亽.° 提交于 2020-02-04 00:52:22
五、应用程序优化:代码级优化 1、优化思路 做优化首先要知道从哪里入手,也就是要知道系统的瓶颈在哪里。一个请求会消耗很多资源:CPU、内存、网络、磁盘等。这些资源中总会有一个到达瓶颈,只有优化最先到达瓶颈的资源才会产生效果。 压测工具 Java有两个经典的代码热点分析工具:JProfiler和Yourkit Apache ab压测工具 这些具体使用参考文档。 发现瓶颈 Jstack,可以看看当前的Java线程 压测请求不是本机,要注意TCP连接数,可以使用netstat命令 检查网卡是否达到了瓶颈 I/O也可能成为瓶颈 2、影响性能的因素 所谓提升性能,通常意义上就是提升系统的QPS,即提升系统的吞吐量。 要提升系统的QPS,首先要了解QPS与RT的关系。 QPS与性能的关系 支持的线程数越多QPS越高,这只在一定范围内适用。 影响线程数量的两个主要因素是CPU数量和线程等待时间。 对于大部分的Web系统,RT(response tiime)一般由CPU执行时间和线程等待时间(远程RPC调用、I/O等待、sleep、wait等)组成。 减少CPU的执行时间对QPS有实质的提升,减少线程的等待时间对QPS提升不明显。 设置最佳线程数 所谓最佳线程数是指消耗完服务器的瓶颈资源的一个临界线程数量。 最佳线程数=[(线程等待时间+线程CPU时间)/线程CPU时间]/CPU数量。

大型网站技术架构演进与性能优化(三) 大型网站平台化演进:大中台小前台

断了今生、忘了曾经 提交于 2020-02-02 01:06:43
三、大型网站平台化演进:大中台小前台 中台这个概念早期是由美军的作战体系演化而来的,技术上所说的“中台”主要是指学习这种高效、灵活和强大的指挥作战体系。电商经过十几年的发展,组织已经庞大而复杂,业务不断细化拆分,也导致野蛮发展的系统越来越不可维护,开发和改造效率极低,也有很多新业务不得不重复造轮子,所以中台的目标是为了解决效率问题,同时降低创新成本。 1、为什么需要中台 本质上是为了解决业务实现的效率问题,降低创新的成本。 一些数据 电商业务的复杂度 系统规模的复杂度 单系统 分布式业务系统 业务平台 业务中台 构建基础平台 组织管理的复杂度 呼唤全能工程师 呼唤系统架构师 业务平台团队诞生 业务中台组织诞生 2、什么是中台 通过制定标准和机制,把不确定的业务规则和流程通过工业化和市场化的手段确定下来,以减少人与人之间的沟通成本,同时还能最大程度地提升协作效率。 中台的目标:减少沟通成本,提升协作效率。 中台的实现手段:制定标准和规范。 原则:集中管控,分布式执行。 3、提升中台的效率 沟通效率问题 统一术语 结构化表达需求 统一业务身份 开发效率 开发态和运行态分离:就是大家线下的开发都是独立进行的,包括打包和部署,接口的调动分开,走远程调用;另一种技术采用Node技术。 对系统进行分层和抽象建模。 测试效率 全链路Beta测试 运维效率 打包编译环节:优化流程、预处理

ASP.NET Core搭建多层网站架构【12-xUnit单元测试之集成测试】

落爺英雄遲暮 提交于 2020-02-01 17:05:47
2020/02/01, ASP.NET Core 3.1, VS2019, xunit 2.4.1, Microsoft.AspNetCore.TestHost 3.1.1 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【12-xUnit单元测试之集成测试】 使用xUnit借助TestServer进行集成测试,在单元测试中对WebApi的每个接口进行测试 文章目录 此分支项目代码 本章节介绍了使用xUnit借助TestServer进行集成测试,在单元测试中对WebApi的每个接口进行测试 新建单元测试 在tests解决方案文件夹下新建xUnit单元测试,记得存放在实际tests路径下,取名WebApiTests 添加包引用 向 WebApiTests 单元测试添加 Microsoft.AspNetCore.TestHost 包引用: <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="3.1.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" /> <PackageReference Include="xunit" Version="2.4.1" />

ASP.NET Core搭建多层网站架构【8-使用AOP动态拦截器进行服务层日志记录】

给你一囗甜甜゛ 提交于 2020-01-30 02:06:16
2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【7-编写角色业务的增删改查】 编写最简单的增删改业务,涉及到DI依赖注入的使用、AutoMapper的使用、工作单元与仓储的使用、雪花Id的生成 文章目录 此分支项目代码 本章节介绍了编写最简单的增删改查业务,涉及到DI依赖注入的使用、AutoMapper的使用、工作单元与仓储的使用 来源: https://www.cnblogs.com/kasnti/p/12241973.html

ASP.NET Core搭建多层网站架构【7-编写角色业务的增删改查】

喜夏-厌秋 提交于 2020-01-29 20:14:51
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【7-编写角色业务的增删改查】 编写最简单的增删改查业务,涉及到DI依赖注入的使用、AutoMapper的使用、工作单元与仓储的使用 文章目录 此分支项目代码 本章节介绍了编写最简单的增删改查业务,涉及到DI依赖注入的使用、AutoMapper的使用、工作单元与仓储的使用 类库添加引用 向 MS.Services 类库添加对 MS.Models 项目的引用 BaseService 在 MS.Services 类库中添加 BaseService.cs 类: using AutoMapper; using MS.DbContexts; using MS.UnitOfWork; namespace MS.Services { public interface IBaseService { } public class BaseService : IBaseService { public readonly IUnitOfWork<MSDbContext> _unitOfWork; public readonly IMapper _mapper; public BaseService(IUnitOfWork<MSDbContext>

ASP.NET Core搭建多层网站架构【5.1-WebCore网站核心配置】

余生长醉 提交于 2020-01-29 03:17:30
2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【5.1-WebCore网站核心配置】 统一封装网站核心配置,注册跨域策略,实例化雪花算法,后期可扩展添加多语言支持 文章目录 此分支项目代码 本章节介绍了统一封装网站核心配置,注册跨域策略,实例化雪花算法,后期可扩展添加多语言支持 添加网站配置及跨域配置 在 MS.WebApi 应用程序 appsettings.json 中添加以下节点: "SiteSetting": { "WorkerId": 1, //for snowflake workerid "DataCenterId": 1, //for snowflake datacenterid "LoginFailedCountLimits": 3, //the number of login failed "LoginLockedTimeout": 3 //(minutes) account locked timeout }, "Startup": { "Cors": { "AllowOrigins": "http://localhost:8080,http://localhost:8081" } } 添加完成后,如下图所示: 说明: WorkerId

ASP.NET Core搭建多层网站架构【4.2-网站数据库实体设计及映射配置】

♀尐吖头ヾ 提交于 2020-01-28 21:09:34
2020/01/28, ASP.NET Core 3.1, VS2019, EntityFrameworkCore 3.1 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【4.2-网站数据库实体设计及映射配置】 网站数据库实体设计,使用EntityFrameworkCore 3.1 FluentAPI映射配置实体 文章目录 此分支项目代码 本章节介绍后台管理的网站数据库实体设计 需求分析 首先要实现的功能有用户登录、角色管理、日志记录 大概有四张表:用户表、密码表、角色表、日志表 日志表: 用户表: 密码表: 角色表: 好像博客园md不支持表格功能?所以只能截图展示,excel表格上传至项目docs文件夹中 字段设计说明 日志表主键Id是数据库自增的,也就是在向数据库插入日志时,不用管Id,往里写入就行 用户表、角色表的Id都是long类型的,也就是使用雪花算法生成的Id 密码表的主键是Account,UserId是用户表外键 用户表和角色表拥有StatusCode、Creator、CreateTime、Modifier、ModifyTime,标明该记录的状态、创建时间等信息 创建实体类 在 MS.Entities 类库中添加Core文件夹,在Core文件夹中添加 IEntity.cs 类: using System; namespace MS

ASP.NET Core搭建多层网站架构【0-前言】

青春壹個敷衍的年華 提交于 2020-01-28 00:57:41
2020/01/26, Asp.Net Core 3.1, VS2019 摘要:基于Asp.Net Core 3.1 WebApi搭建后端多层网站架构 网站内容 简单的后台管理系统 支持MySQL、SQL server 用户登录、角色管理 技术介绍 主要采用Asp.Net Core 3.1(WebApi) 框架实现一个后台管理系统 EntityFrameworkCore 3.1做ORM工具,FluentAPI方式配置实体映射 NLog做日志记录 Autofac配合Castle.Core实现动态拦截器(AOP) JWT做登录验证 AutoMapper做映射工具 Postman做接口调试 实现目标 每一处代码(每一个工具)尽量做到最佳实践 完善的单元测试 目录 0-前言 1-项目结构分层建立 2-公共基础库 3-编写单元测试 4.1-网站数据库实体设计 4.2-WebCore网站核心配置 4.3-添加NLog日志记录器 5.1-数据库实体类映射配置 5.2-工作单元和仓储设计 6.1-使用AOP动态拦截器进行服务层日志记录 6.2-使用JWT进行授权验证 7.1-使用AutoMapper映射实体对象 7.2-使用ViewModel注解验证 8-业务层编写业务 来源: https://www.cnblogs.com/kasnti/p/12236586.html

大型网站架构系列:缓存在分布式系统中的应用(一)

混江龙づ霸主 提交于 2020-01-22 03:36:04
缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,CDN缓存(原理,架构参考和技术实践),反向代理缓存(原理,Squid架构实践和常用代理缓存之间的比较)。本文主要是自己的学习总结和网络文章摘录,供学习之用。 本次分享大纲 缓存概述 CDN缓存 反向代理缓存 分布式缓存 本地缓存 缓存架构示例 参考资料 分享总结 一、缓存概述 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点 数据访问的性能问题 。 提供高性能的数据快速访问 。 1.1缓存的原理 (1)将数据写入/读取速度更快的存储(设备); (2)将数据缓存到离应用最近的位置; (3)将数据缓存到离用户最近的位置。 1.2缓存分类 在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。 (1)CDN缓存; (2)反向代理缓存; (3)分布式Cache; (4)本地应用缓存; 1.3缓存媒介 常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等; 缓存的内容:文件,数据,对象; 缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式) 1.3缓存设计 缓存设计需要解决以下几个问题: (1)缓存什么?