架构

软件体系架构阅读笔记三

爷,独闯天下 提交于 2020-03-28 11:53:03
单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring mvc或者Python Drango框架的应用。 单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。 下面是单体架构应用的一些缺点: 复杂性高 : 以一个百万行级别的单体应用为例,整个项目包含的模块非常多、模块的边界模糊、 依赖关系不清晰、 代码质量参差不齐、 混乱地堆砌在一起。可想而知整个项目非常复杂。 每次修改代码都心惊胆战, 甚至添加一个简单的功能, 或者修改一个Bug都会带来隐含的缺陷。 技术债务 : 随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务, 并且越积 越多。“ 不坏不修”, 这在软件开发中非常常见, 在单体应用中这种思想更甚。 已使用的系统设计或代码难以被修改,因为应用程序中的其他模块可能会以意料之外的方式使用它。 部署频率低 : 随着代码的增多,构建和部署的时间也会增加。而在单体应用中, 每次功能的变更或缺陷的修复都会导致需要重新部署整个应用。全量部署的方式耗时长、 影响范围大、 风险高, 这使得单体应用项目上线部署的频率较低。

基础架构的分层

橙三吉。 提交于 2020-03-27 00:13:48
controller 只负责参数的获取和判断,然后调用业务逻辑层,业务逻辑层负责调取model模型层的数据,然后组装数据,返回给controller控制器层,必要时由业务逻辑层调用lib基础库层 来源: https://www.cnblogs.com/aln0825/p/12578448.html

【业务系列】浅谈各种架构遇到的问题解决方案

為{幸葍}努か 提交于 2020-03-26 23:39:26
3 月,跳不动了?>>> 在讨论分层架构的过程中,我们常常会被问答一下几个问题: 1: 是否需要前后端分离,什么时机分离 2: 是否需要服务化,什么时机服务化 3: 是否需要引入DAO层,什么时机引入 4:是否需要抽取通用中台业务,什么时机抽取 同道们的这些提问,其实很难回答。在不了解业务发展阶段,业务规模,数据量并发量的情况下,妄下YES或NO的结论,本身就是不负责任的。下面我给出一些,我们架构演进的一些观点,同时也经历过系统的一系列的拆分,随便说说自己的感悟。 1 单体应用阶段(第一节段) 如上图所示,为应用在单体应用的时候的一般架构图(我们用的技术框架以流行的ssm为例子) 这时候的应用简单,需要的资源少,可以完全支撑起简单的业务,这时,我们的包应该会这样的划分使用的,比如我们有3张表A,B,C 这时就与对应的3个entity, 我们完美的想法是entity与表字段是一 一队应的(注意:是完美构想)entity 分别是A,B,C 这时也有对应的Mapper接口 对应的CURD,AMapper, BMapper, CMapper, 在业务层的service,我们也会有这样的划分Aservice(AserviceImpl),Bservice(BserviceImpl), Cservice(CserviceImpl)。 此时,我们规定AserviceImpl-->AMapper,

Springcloud核心知识点(必备)

耗尽温柔 提交于 2020-03-26 16:15:34
Springcloud核心知识点(必备): 1.1 什么是微服务? 微服务是一种架构风格,是以开发一组小型服务的方式来作为一个独立的应用系统,每个服务都运行在自已的进程中,服务之间采用轻量级的HTTP通信机制 1.2 微服务之间是如何独立通讯的? RestFul Http协议是微服务架构中最常用的通讯机制。 通讯方式: 同步:RPC ,REST等。 异步:消息队列,要考虑消息的可靠传输、高性能,以及编程模型的变化等。 1.3 SpringCloud和Dubbo有哪些区别? springcloud和dubbo的最大区别:springcloud抛弃了dubbo的rpc通信,采用的是基于http的rest方式。 1.4 SpringBoot和SpringCloud,请谈谈对他们的理解? SpringCloud是Spring为微服务架构思想做的一个一站式实现。从某种程度是可以简单的理解为,微服务是一个概念、一个项目开发的架构思想。SpringCloud是微服务架构的一种java实现。 SpringCloud是基于SpringBoot的一套实现微服务的框架。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟SpringBoot框架一起使用的话,会让你开发微服务架构的云服务非常方便。

为啥要有微服务?啥是微服务?

谁说我不能喝 提交于 2020-03-26 09:42:30
前言 为什么要有微服务呢? 什么是微服务? SpringCloud 中为什么会有那么多的组件? ...... 作为SpringCloud教程的第一篇,不讲解具体的技术使用,通过一个通俗易懂的小故事,来解决这些疑惑。 本文分为三个部分: 架构的演变,即为什么会出现微服务技术 什么是微服务,即微服务的标准概念 微服务要解决什么问题,即微服务中那么多的组件都是干嘛的 从单体到微服务「小故事讲解架构演变」 新技术会站在老技术的基础上,解决老技术出现的问题的同时,进行迭代和演化 单体架构 这年,可能是十年前也可能是十五年前,小鹿入职了一家处于萌芽期的电商公司—并夕夕商城。 这个时候公司初创,人少,事儿少,用户少,当然了老板的钱也少,本着多快好省的信念,作为公司唯一开发工程师小鹿,跌跌撞撞的开发了一款能用的商城网站,架构如下: 网站整体非常的简单,在没什么用户的现阶段也是非常的好用,而且还非常的省心,但是没有想到的是,公司业务越来越好,用户量是越来越大,随着访问量的不断增大,项目经常卡死故障。 于是老板大手一挥,指引商城技术改革,emmm,还加钱招人,又招了小羊,小马数位同事,对并夕夕商城进行升级优化。 经过激烈的讨论,优化方向为:增加应用负载能力,即负载均衡,应用服务器集群 于是,噔噔蹬蹬,新的架构出现了 负载均衡 增加负载均衡之后,应用服务器不再是系统的瓶颈了

架构必备词汇

情到浓时终转凉″ 提交于 2020-03-26 07:28:42
高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机制(上线回滚、数据库版本回滚、事务回滚) 高并发 应用缓存 HTTP缓存 多级缓存 分布式缓存 连接池 异步并发 分布式事务 二阶段提交(强一致) 三阶段提交(强一致) 消息中间件(最终一致性),推荐阿里的RocketMQ 队列 任务队列 消息队列 请求队列 扩容 单体垂直扩容 单体水平扩容 应用拆分 数据库拆分 数据库分库分表 数据异构 分布式任务 网络安全 SQL注入 XSS攻击 CSRF攻击 拒绝服务(DoS,Denial of Service)攻击 架构装逼必备工具 操作系统 Linux(必备)、某软的 负载均衡 DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB(阿里云) 分布式框架 Dubbo、Motan、Spring-Could 数据库中间件 DRDS (阿里云)、Mycat、360 Atlas、Cobar (不维护了) 消息队列 RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka 注册中心 Zookeeper、Redis 缓存 Redis、Oscache、Memcache、Ehcache 集成部署 Docker、Jenkins

赶考状元:如何快速应对数据库QPS暴涨20倍?我们做了三次决策

女生的网名这么多〃 提交于 2020-03-26 01:42:29
受疫情影响,全国各学校的开学均被延期。为避免耽误学生的课业,教育部推出了“停课不停学”政策,鼓励师生积极开展线上教学模式。 赶考状元(上海亿山睦教育科技有限公司)为此积极响应政府号召,向湖北全省一年级到高三的学子免费开放教材的同步在线教学课程,后来进一步扩大至全国范围。这一公益活动获得了很大反响,网站用户注册量和浏览量超过平时数倍。 虽然活动从策划到上线总共只有4天时间,赶考网技术团队通过科学决策,及时精密的实施,完成了业务代码改造、架构评估、扩容升级、SQL优化等工作,期间也和UCloud UDB团队紧密合作,在其协助下实现了数据库的架构改造和扩容,很好地承接了QPS暴涨20倍的访问压力,圆满完成技术保障任务。 下面分享一些我们在此过程中的细节和思考,供有快速扩容需要的企业参考。 面临的业务痛点 公司自2005年成立一直专注于K12在线教育,此次疫情公益活动构想阶段,业务侧运用此前超过十年的互联网及线下教育经验,快速设计了有效可行的方案,在不少细节上下了功夫,例如加速审核通道,只需两步即可学习的易用性,面向家长推广的二维码等。 技术团队的任务则是提前预判后台流量的迅猛增长,未雨绸缪设计行之有效的预案,查漏补缺,切实保障活动顺利流畅运行。为此我们细致梳理了现有架构的薄弱点,并相应制定了精准有效的扩容方案。 由于我们原先的扩容是稳定慢节奏的,这次预见到了大量访问需求

微信团队分享:微信支付代码重构带来的移动端软件架构上的思考

你说的曾经没有我的故事 提交于 2020-03-25 20:37:34
3 月,跳不动了?>>> 本文原文由微信客户端高级工程师方秋枋原创发表于WeMobileDev公众号,收录时有修订和加工,感谢作者的无私分享。 1、引言 作为一个重要业务,微信支付在客户端上面临着各种问题。 其中最核心问题就是分平台实现导致的问题: 1)iOS 和安卓实现不一致:容易出 Bug、通过沟通保证不了质量; 2)扩展性差且无法快速响应业务需求:需求变更迭代周期长、数据上报不全面; 3)质量保障体系不完善:缺少业务及设计知识沉淀、协议管理松散、缺少统一的自动化测试; 4)用户体验不一致:比如下图就是之前安卓和 iOS 没有统一前的收银台。 ▲ 微信安卓片和iOS版,没有统一用户体验前的收银台功能 为了解决分平台实现这个核心问题,并解决以往的技术债务。我们建立起了一整套基于 C++ 的跨平台框架,并对核心支付流程进行了重构。微信支付跨平台从 iOS 7.0.4 版本起, 安卓从 7.0.7 版本起全面覆盖。 重构后的软件架构原理如下图所示: 本文分享了微信团队基于 C++ 的移动端跨平台技术在重构整个微信支付功能的过程中,对于移动端软件架构设计方面的思考和实践总结。 术语约定: 本文中的名词 CGI 可以理解为一个网络请求,类似HTTP请求。 2、关于作者 方秋枋: 毕业于华中科技大学,现为微信客户端高级工程师。目前主要负责微信支付的跨平台开发框架与相关业务开发。 是开源项目

华为云-公有云架构

戏子无情 提交于 2020-03-25 17:47:38
华为公有云架构 华为公有云的主要服务如弹性云服务器(ECS)、弹性伸缩服务(AS)、云硬盘 (EVS)、云硬盘备份(VBS)、对象存储服务(OBS) 、虚拟私有云(VPC)、弹性负 载均衡(ELB)、Anti-DDOS流量清洗、云数据库(RDS)、IAM统一身份认证、云监控 服务(CES)、EI、API等云服务产品。 一、 公有云服务架构 1、公有云全堆栈解决方案使能数字化转型 2、华为公有云架构 3、高可用的资源架构模型 二、 公有云服务的主要服务产品 1、华为云标准产品体系 2、计算服务:弹性云服务器(ECS) 弹性云服务器( Elastic Cloud Server )是一种可随时自助获取、计算能力可弹性伸缩的云服务器, 3、计算服务:GPU加速云服务器 4、计算服务:弹性伸缩服务(AS) 弹性伸缩服务(Auto Scaling)可根据用户的业务需求和策略,自动调整计算资源,使得云服务器数量可随业务负 载增长而增加,随业务负载降低而减少,保证业务平稳健康运行。 5、存储服务:云硬盘(EVS) 云硬盘(Elastic Volume Service)是一种基于分布式架构的,可弹性扩展的虚拟块存储服务。具有高数据可靠性,高I/O吞吐能力等特点。像使用传统服务器硬盘一样,可以对挂载到云服务器上的云硬盘做格式化、创建文件系统等操作,并对数据持久化存储。 6、存储服务:云硬盘备份(VBS