- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 架构设计三原则
合适原则合适原则宣言:“合适优于业界领先”。简单原则简单原则宣言:“简单优于复杂”。演化原则演化原则宣言:“演化优于一步到位”考虑到软件架构需要根据业务发展不断变化这个本质特点,软件架构设计其实更加类似于大自然“设计”一个生物,通过演化让生物适应环境,逐步变得更加强大:首先,生物要适应当时的环境。其次,生物需要不断地繁殖,将有利的基因传递下去,将不利的基因剔除或者修复。第三,当环境变化时,生物要能够快速改变以适应环境变化;如果生物无法调整就被自然淘汰;新的生物会保留一部分原来被淘汰生物的基
2021-09-14 20:12:05
356
原创 设计备选方案心得
经过架构设计流程第 1 步——识别复杂度,确定了系统面临的主要复杂度问题,进而明确了设计方案的目标,就可以开展架构设计流程第 2 步——设计备选方案。架构设计备选方案的工作更多的是从需求、团队、技术、资源等综合情况出发,对主流、成熟的架构模式进行选择、组合、调整、创新。1. 几种常见的架构设计误区**(1)**设计最优秀的方案。不要面向“简历”进行架构设计,而是要根据“合适”、“简单”、“演进”的架构设计原则,决策出与需求、团队、技术能力相匹配的合适方案。**(2)**只做一个方案。一个方案容易陷入
2021-09-14 20:11:41
370
原创 高性能数据库集群——分库分表
读写分离只是分散了数据库读写操作的压力,但没有分餐存储压力。当数据量达到千万条甚至更多时,单台数据库服务器存储能力会成为瓶颈。主要体现为一下几个方面:业务分库存在三个问题。1) Join操作。业务分库后,原本在同一数据库的表分散到不同的数据库中,导致无法使用Join查询。2)事务问题原本在同一数据库中不同的表可以在同一事务中修改,分库后,表分开,无法通过事务统一修改。3)成本问题本来一个服务器可以搞定的事情,需要拆分成三个服务器,成本提高。水平分表后需要考虑(1)路由(2)
2021-09-14 20:11:03
150
原创 六大复杂度来源后三个
低成本**What:**低成本是架构设计中需要考虑一个约束条件,但不会是首要目标。低成本本质上是与高性能和高可用冲突的,当无法设计出满足成本要求的方案,就只能协调并调整成本目标。**How:**一般通过“创新”达到低成本的目标。(1)引入新技术。主要复杂度在于需要去熟悉新技术,并且将新技术与已有技术结合;一般中小型公司基本采用该方式达到目标。(2)开创一个全新技术领域。主要复杂度在于需要去创造全新的理念和技术,并且与旧技术相比,需要有质的飞跃,复杂度更高;一般大公司拥有更多的资源、技术实力会采用该方式来
2021-09-09 10:31:33
161
原创 规模带来复杂度
规模带来复杂度主要原因就是“量变引起质变”,当数量超过一定的阈值后,复杂度会发生质的变化。常见的规模带来的复杂度有:功能越来越多,导致系统复杂度指数级上升例如,某个系统开始只有 3 大功能,后来不断增加到 8 大功能,虽然还是同一个系统,但复杂度已经相差很大了,具体相差多大呢?我以一个简单的抽象模型来计算一下,假设系统间的功能都是两两相关的,系统的复杂度 = 功能数量 + 功能之间的连接数量,通过计算我们可以看出:3 个功能的系统复杂度 = 3 + 3 = 68 个功能的系统复杂度 = 8
2021-09-09 10:26:36
317
原创 What:什么是架构的可扩展性?
What:什么是架构的可扩展性?业务需求、运行环境方面的变化都会导致软件系统发生变化,而这种软件系统对上述变化的适应能力就是可扩展性。可扩展性可以理解为是一种从功能需求方面考虑的软件属性,属性就会存在好坏之分。按照可扩展性的定义,一个具备良好可扩展性的架构设计应当符合开闭原则:对扩展开放,对修改关闭。衡量一个软件系统具备良好可扩展性主要表现但不限于:(1)软件自身内部方面。在软件系统实现新增的业务功能时,对现有系统功能影响较少,即不需要对现有功能作任何改动或者很少改动。(2)软件外部方面。软件系
2021-09-09 09:43:13
1167
原创 HOW - 如何做到高可用
HOW - 如何做到高可用核心思想:网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。从架构角度看可用性:当前网站系统多采用经典的分层模型,从上到下为:应用层、服务层与数据层。应用层主要实现业务逻辑处理;服务层提供可复用的服务;数据层负责数据读写;在部署架构上常采用应用和数据分离部署,
2021-09-09 09:35:44
104
原创 WHY - 为什么会出现不可用?
WHY - 为什么会出现不可用?硬件故障。网站多运行在普通的商用服务器,而这些服务器本身就不具备高可用性,再加之网站系统背后有数量众多服务器,那么一定时间内服务器宕机是大概率事件,直接导致部署在该服务器上的服务受影响。软件BUG或网站更新升级发布。BUG不能消灭,只能减少;上线后的系统在运行过程中,难免会出现故障,而这些故障同样直接导致某些网站服务不可用;此外,网站更新升级发布也会引起相对较频繁的服务器宕机。不可抗拒力。如地震、水灾、战争等。...
2021-09-09 09:33:22
73
原创 WHAT - 什么是可用性
高可用与高性能,是架构设计中两个非常重要的决策因素。因此,面对不同业务系统的不同需求,对高可用与高性能也会有不同的决策结论,其实现的复杂度也各不相同。支付宝业务,对于可用性和性能就会有很高的要求,在可用性方面希望能提供7*24不间断服务,在高性能方面则希望能实时收付款;而对于一个学生管理系统,在可用性与性能方面就不一定要有多高的要求,比如晚上可关机,几秒内能查询到信息也可接受。为此,高可用性与高性能的复杂度讨论需要结合业务需求。1 WHAT - 什么是可用性?定义可用性,可以先定义什么是不可用
2021-09-09 09:29:52
299
原创 什么是架构
什么是架构架构是为了应对软件系统复杂度而提出的一个解决方案。个人感悟是:架构即(重要)决策,是在一个有约束的盒子里去求解或接近最合适的解。这个有约束的盒子是团队经验、成本、资源、进度、业务所处阶段等所编织、掺杂在一起的综合体(人,财,物,时间,事情等)。架构无优劣,但是存在恰当的架构用在合适的软件系统中,而这些就是决策的结果。1 架构是为了应对软件系统复杂度而提出的一个解决方案。2 架构即(重要)决策3 需求驱动架构,架起分析与设计实现的桥梁4 架构与开发成本的关系...
2021-09-09 09:21:30
3645
原创 进程和线程
面试官: 小伙子,说下进程和线程?我:1, 早期的计算机是没有操作系统的,只有输入,计算,输出。手工输入速度远低于计算机的计算速度。2, 于是出现了批处理操作系统,通过纸带,磁带等工具预先写入指令,形成一个指令清单(即任务)交给计算机处理。但批处理系统的缺点是只能有一个任务,而且当计算机在进行I/O处理时,CPU是空闲的。3, 世人发明了进程,一个进程就代表一个任务,多个进程通过分时操作能让用户认为并行操作多任务,进程间的资源是独立单元,但是可以通过介质进行通信。缺点:进程内只进行串行处理
2021-09-09 09:17:23
107
原创 ## HOW 如何做好高性能?
HOW 如何做好高性能?可以从垂直与水平两个维度来考虑。垂直维度主要是针对单台计算机,通过升级软、硬件能力实现性能提升;水平维度则主要针对集群系统,利用合理的任务分配与任务分解实现性能的提升。垂直维度可包括以下措施:增大内存减少I/O操作更换为固态硬盘(SSD)提升I/O访问速度使用RAID增加I/O吞吐能力置换服务器获得更多的处理器或分配更多的虚拟核升级网络接口或增加网络接口水平维度可包括以下措施:功能分解:基于功能将系统分解为更小的子系统多实例副本:同一组件重复部署到多台不同的服
2021-09-09 09:15:32
83
原创 1 WHAT 对高性能的理解?
**1 WHAT 对高性能的理解?**性能是软件的一个重要质量属性。衡量软件性能包括了响应时间、TPS、服务器资源利用率等客观指标,也可以是用户的主观感受(从程序员、业务用户、终端用户/客户不同的视角,可能会得出不同的结论)。在说性能的时候,有一个概念与之紧密相关—伸缩性,这是两个有区别的概念。性能更多的是衡量软件系统处理一个请求或执行一个任务需要耗费的时间长短;而伸缩性则更加关注软件系统在不影响用户体验的前提下,能够随着请求数量或执行任务数量的增加(减少)而相应地拥有相适应的处理能力。
2021-09-09 09:13:49
198
原创 PCA和特征选择技术都是特征工程的一部分,他们有什么不同?
PCA和特征选择技术都是特征工程的一部分,他们有什么不同?特征选择是从已经存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们仍然能知道特征在源数据的哪个位置,待表数据的什么含义。PCA是将已经存在的特征进行压缩,降维完成后的特征不再是源数据中的任何一个特征,而是通过通过某种方式组合起来的特征,新的特征矩阵不再具有可读性,属于特征创造的一种。...
2020-04-27 10:42:14
848
原创 主成分分析PCA和奇异值分解(1)
矩阵分解: 用新的n个新特征向量,让数据能够被压缩到少数特征上,并且总信息量不损失太多的技术叫做矩阵分解。PCA和SVD 是两种不懂的降维算法,但都遵循降维过程,只不过矩阵分解的方法不同,信息量的衡量指标不同,。PCA是用方差作为信息量的衡量指标,方差越大,信息量越多,降维步骤:...
2020-04-27 10:15:47
112
原创 特征工程
特征选择: 过滤法,嵌入法,包装法,降维算法。方差过滤法(VarianceThreshold)通过特征的方差来筛选特征, 优先消除方差为0的特征。默认方差为0,参数threshold 可以调节方差的阈值。from sklearn.feature_selection import VarianceThresholdselector = VarianceThreshold()x_var0 =...
2020-04-27 10:09:48
109
原创 数据预处理
数据挖掘的五大流程1.获取数据2.数据预处理从数据中检测,纠正,删除损坏,不准确,不适用的数据,可能的问题有:数据类型不同,比如有文字,有的是数字,有的含有时间序列,有的质量不行,有噪声,有异常,有缺失,有重复,等等。目的: 让数据适应模型,匹配模型的需求。3.特征工程将原始数据转换成更能代表预测模型的潜在问题的特征的过程。可以通过挑选最相关的特征,提取特征以及创造特征,(通常用...
2020-04-27 10:01:32
181
原创 机器学习中调参的基本思想(随机森林,决策树)
1.高手通常是来自经验。(1) 经验来自: 正确的调参思路,对模型的理解。不断尝试。2.新手一般是画学习曲线,或者网格搜索。3.机器学习中 ,用来衡量模型在未知数据上的准确率,叫做泛化误差。 模型在测试集或者袋外数据上表现糟糕时,称作模型的泛化误差大,泛化成度不够。 当模型太复杂时,模型就会过拟合,泛化能力不够,泛化误差大,当模型太简单,模型就会欠拟合。 误...
2020-04-26 10:27:31
423
原创 准确率、精确率、召回率、F—score比较
举例来说,用血压值来检测一个人是否有高血压,测出的血压值是连续的实数(从0~200都有可能),以收缩压140/舒张压90为阈值,阈值以上便诊断为有高血压,阈值未满者诊断为无高血压。二元分类模型的个案预测有四种结局:真阳性(true positive, TP):诊断为有, 实际上也有高血压;伪阳性(false positive,FP):诊断为有,实际却没有高血压;真阴性(true negat...
2020-04-23 22:12:24
2479
原创 排序图
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib.patches as patches #设置子图需要的包import matplotlib.patches as patchesplt.rcParams['font.sans-serif']=['Simhei']#显...
2020-04-16 11:00:58
552
原创 matplotlib绘画折线图
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv('C:/Users/GYX/Desktop/mtcars.csv')x = df.loc[:,'mpg'] #提取mpg这一列的信息df['mpg_z'] = (x - x.mean())/x.std();#z-scor...
2020-04-16 10:55:05
117
原创 密度图
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt %matplotlib inlineplt.rcParams['font.sans-serif']=['Simhei']plt.rcParams['axes.unicode_minus']=Falsedf...
2020-04-16 10:50:53
331
原创 时间序列图
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsdata = pd.read_csv("C:/Users/GYX/Desktop/AirPassengers.csv")遇到导入的日期不是日期格式时有三种方法¶...
2020-04-16 10:48:13
1246
1
原创 组成图
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsimport warnings;warnings.filterwarnings(action='once')%%cmdpip install pywaffle...
2020-04-16 10:45:15
315
原创 变化图
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsimport warnings;warnings.filterwarnings(action='once')df = pd.read_csv("C:/Users...
2020-04-16 10:41:22
174
原创 jupyter notebook设置(1)
Jupyter Notebook中用matplotlib画图时,如何显示中文和负号plt.rcParams['font.sans-serif']=['Simhei']#显示中文,plt.rcParams['axes.unicode_minus']=False#显示负号
2020-04-15 09:03:04
148
原创 numpy常用函数
numpy 读写文件#写:函数将数据a存储到test.txt文件中np.savetxt('test.txt', a)#读表示读取test.csv文件,分隔符设置为‘,’(delimiter=','),usecols表示取得哪几列数据,unpack=True表示分拆存储不同列的数据,即分别将第6列与第7列数据赋值给变量x,y'''x, y = np.loadtxt('test....
2020-01-09 10:19:42
169
原创 numpy中的r_[ ]和c_[ ]的区别
当两个矩阵连接式可以用到hstack 和vhstack 和concatenate()三种方法,这里有新的方法。可以看到,np.r_()是按行叠加,np.c_()是按列叠加。实现同样的叠加效果...
2020-01-08 12:42:46
702
原创 numpy 中的tile()函数
tile()函数也是用来重复矩阵时用到的。第一个参数a,是用来复制的矩阵。第二个参数n,是重复的次数,默认是一行整体重复n次。(需要注意的是tile()和repeat() 的区别,repeat 是一个元素一个元素的重复,tile()是一整行一整行的复制。这里第二个参数,传入一个元组,元组内的第一个参数是行重复多少次,元组内的第二个参数是列重复多少次。...
2020-01-08 11:39:15
640
原创 numpy中的repeat()函数
当需要重复矩阵中的数据时,可以用到repeat()函数。用法如下:a = np.arange(10).reshape(2,-1)
2020-01-08 11:25:53
1308
mpg_ggplot2.csv
2020-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人