软件工程
Deniro Lee
这个作者很懒,什么都没留下…
展开
-
GitHub 网页中看不到图片的解决方法
打开 https://www.ipaddress.com/,输入域名,查找对应的 IP 地址:除了可以看出 IP 地址之外,还可以看到服务器所在的国家。原创 2020-06-13 08:13:22 · 3486 阅读 · 0 评论 -
说说观察者模式
观察者模式,又叫做发布-订阅模式(Publish/Subscribe)。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象状态发生变化时,会通知所有已注册的观察者对象,使它们能够依据实际情况,进行后续处理。假设,我们有个自播带货的应用场景就可以用到观察者模式。直播带货指的是通过视频直播平台,进行现场直播卖货的模式。目前带货平台以淘宝、快手、抖音为主,京东、拼...原创 2020-05-01 08:25:00 · 256 阅读 · 0 评论 -
微服务设计笔记(10)—— 版本管理
服务接口很难不发生改变,那我们该如何应对这种改变呢?下面是一些应对策略:1 容错性读取最好的策略就是不对接口进行破坏性修改。但这几乎是不可能的。客户端应该应用 Postel 法则 ( 也叫作鲁棒性原则 ) 灵活地应对服务端接口所发生的变化。鲁棒是 Robust 的音译,也就是健壮和强壮的意思。指的是系统在异常和危险情况下的生存能力。比如说,计算机软件在输入错误 、 磁盘故障 、 网络...原创 2020-01-12 18:43:06 · 1944 阅读 · 0 评论 -
说说什么是面向对象设计方法
Alan Kay 总结了面向对象设计方法五大基本特征:万物皆对象。它存储数据,并且可以对其“发出请求”执行某些操作。从理论上讲,我们总是可以从要解决的问题中抽象出概念性的组件,然后在程序中将其表示为一个对象。程序是由一组对象组成的,它们彼此之间通过消息传递互为往来。如果需要请求调用一个对象中的某个方法,我们需要向该对象发送消息。每个对象都有自己的存储空间,并可容纳其他对象。还可以通过封装现...原创 2020-01-04 16:31:28 · 1367 阅读 · 1 评论 -
Linux SVN 命令出现 Permission denied 问题的解决办法
原因:因为是由 root 所创建的工作文件夹,所以 jenkins 账户,没有相应权限。解决:使用 chmod 命令,将 jenkins 的工作文件夹赋予 jenkins 账户:chown -R [账户名] [文件夹名称]然后为其设置所有权限:chown 777 [文件夹名称]是不是很简单呀 O(∩_∩)O哈哈~...原创 2019-11-16 11:16:04 · 1937 阅读 · 0 评论 -
svn 抛出 Can't convert string from native encoding to 'UTF-8' 问题的解决方法
原因:SVN 地址包含中文字符。解决:通过 URL 编码器,对 SVN 地址进行编码。巧用 Chrome 浏览器的 F12 Network,可以得到编码后的 SVN 地址:是不是很简单呀 O(∩_∩)O哈哈~...原创 2019-11-16 11:14:05 · 920 阅读 · 0 评论 -
jenkins 中找不到 “管理用户” 选项的解决方法
正常情况下,我们会在 jenkins 的 “系统管理” 中找到“管理用户” 选项,但某些情况下,会找不到。原因:没有开启安全策略。解决:在 “全局安全配置” 中,选中 Enable security,然后选择一项 Security Realm:保存设置后,即可看到 “管理用户” 选项啦:是不是很简单呀 O(∩_∩)O哈哈~...原创 2019-11-16 11:11:13 · 2313 阅读 · 0 评论 -
微服务设计笔记(9)—— REST 架构风格
REST 即表述性状态传递(英文: Representational State Transfer ,简称 REST )一种软件架构风格 。 它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性 。 这里我们讨论下如何使用 REST 架构风格来解决微服务集成问题 。REST 是 RPC 的一种替代方案 。 其中最重要的概念是资源 。比如说处于服务之内的 Cus...原创 2019-09-28 16:45:14 · 327 阅读 · 0 评论 -
微服务设计笔记(8)—— RPC 调用方式
RPC(Remote Procedure Call)—远程过程调用,它是一种不需要了解底层网络技术的协议,就可以通过网络,请求远程服务器上的服务。我们可以调用本地的一个 RPC , 实际上,响应结果是由远程服务器返回的 。RPC 有很多种类型 , 比如 SOAP、Thrift、 protocol buffers 等等 )。不同的技术栈,可以通过其接口定义,很方便地生成客户端或服务端的桩...原创 2019-09-22 14:53:22 · 793 阅读 · 0 评论 -
微服务设计笔记(7)—— 编排与协同
假设在一个应用中,客户注册了一个新账号,而这个动作会触发以下逻辑:在客户的积分账户中创建一条积分记录;通过邮政系统派送一个欢迎礼包;向客户发送欢迎电子邮件;创建新账号的流程图为:考虑具体实现时 , 有两种架构可以选择 。1 编排 (orchestration)编排架构,会有某个中心大脑来领导并驱动整个流程 , 这个大脑就像交响乐队中的指挥。编排架构的缺点是 , 客户服务作...原创 2019-09-22 10:30:14 · 920 阅读 · 1 评论 -
微服务设计笔记(6)—— 同步与异步通信方式
(1)同步通信同步通信指的是:调用远程服务后,必须等待服务响应。其本质是请求/响应模式。客户端发起请求,然后等待响应。(2)异步通信异步通信指的是:调用远程服务后,会直接返回。一般应用于运行时间较长的远程服务,也应用于需要快速响应的业务场景。异步通信,也可以使用请求/响应模式。客户端注册一个回调地址,然后发起请求,当服务端响应后,会调用客户端所注册的回调地址。异步通信,一般是采用订阅者...原创 2019-09-22 10:07:21 · 1083 阅读 · 2 评论 -
微服务设计笔记(5)—— 共享数据库集成模式的弊端
其它服务为了从某个服务中获取信息,采用直接读取数据库的方式。如果需要修改记录,也是直接修改数据库表中的记录。这种集成方式很容易,所以也很普遍。这种集成方式是很容易,但却也存在着很多问题:首先,数据库变为一个大的共享 API。如果,某个服务想要改变业务逻辑,就必须直接改库。为了不影响其它服务,修改表结构时就必须非常小心,并且需要做大量的回归测试来保证质量。服务使用者所选用的技术栈必须与共享...原创 2019-09-22 10:02:53 · 860 阅读 · 0 评论 -
微服务设计笔记(4)——集成技术的选择标准
(1)减少对服务使用者的影响修改了某个服务,比如在响应中添加了一个字段,不会对已有的使用者造成影响。(2)确保所选用技术栈,不会影响 API 设计IT 领域内,唯一不变的就是变化。我们要保持开放的心态,选择让工作变得更有效率的技术栈。(3)让服务易于使用理想情况下,服务使用者可以使用任意技术对接。也可以提供一个客户端 API 供使用者调用,这会让服务变得更易用,但也会造成一定量的耦合度...原创 2019-09-22 09:57:35 · 514 阅读 · 0 评论 -
Unable to create '.git/index.lock' File exists 问题的解决方法
提交新文件到 Git 时,抛出 Unable to create ‘.git/index.lock’ File exists 问题:1 分析Git 执行操作时会自动生成 index.lock 文件,操作结束后会自动删除。这样做的目的是避免同时操作同一个文件夹。某些 Git 操作会出现异常,比如操作被强制关闭,那么这个文件就不会被删除。2 解决删除该目录下的 .git/index....原创 2019-09-08 14:05:57 · 19864 阅读 · 4 评论 -
说说如何在 windows 安装 Jenkins 2.x
1 下载首先,在此地址下载好安装包。2 安装在下载的 zip 包中,双击打开 jenkins.msi,启动安装程序:选择好需要安装的目录,点击 Next:然后就可以愉快地安装咯:看到这个画面,就说明安装成功咯:点击 Finish 按钮,就会进入解锁页面。3 解锁解锁页面:我们可以从 ${jenkins}\secrets\initialAdminPassword 文件...原创 2019-09-07 13:30:16 · 272 阅读 · 0 评论 -
微服务设计笔记(3)——服务建模
1 好服务的特征1.1 松耦合松耦合指的是,修改一个服务,而另一个相关的服务,不需要修改。微服务的重要特点就是:能够独立修改和部署单个服务,而不会影响、甚至修改系统中的其它服务。一个服务应该尽可能少地了解与之协作的服务信息。因为过度了解,会导致紧耦合。1.2 高内聚高内聚指的是,把相关的行为聚集在一起。这样,需要改变行为时,只需要在一处修改,然后独立发布。我们需要做的是,找出业务领域...原创 2019-08-04 14:44:40 · 462 阅读 · 0 评论 -
微服务设计笔记(2)——从架构师角度来看待微服务
架构师职责确保我们的团队有共同的技术愿景,并向我们的客户交付他们想要的系统。需要协调多个团队,甚至整个组织内的工作。1 城市规划师其实架构师更像是城市规划师,需要做出一个允许变化的计划。系统的使用者除了客户,还有开发人员与运维人员。所以,架构师要确保系统适合开发人员在其上进行开发工作。架构师应该专注大方向,只在有限情况下,才参与到具体的实现细节中。保证这套系统,会让开发人员和客户一样开心...原创 2019-08-04 10:23:46 · 286 阅读 · 0 评论 -
微服务设计笔记(1)——概述
微服务就是一些协同工作的小而自治的服务。1 微服务1.1 很小,专注于做好一件事在一个单块系统内,通常会创建一些抽象层或者模块来保证代码的内聚性,从而避免上述问题。内聚性是指将相关代码放在一起,在考虑使用微服务的时候,内聚性这一概念很重要。单一职责原则很好地强调了内聚性这一概念,它是这样讲的:“把因相同原因而变化的东西聚合到一起,而把因不同原因而变化的东西分离开来。”服务专注于某个边界...原创 2019-08-03 11:02:37 · 410 阅读 · 0 评论 -
说说前后端路由
1 基本概念什么是路由?举个例子,GET 或 POST 请求时,服务端会维护一个正则配置表,当请求匹配到某一条具体 URL 路径时,就会分发到不同的 Controller,处理完成后,将 HTML 或数据返回给前端,这样就完成了一次 IO 交互操作。这就是目前绝大多数网站所使用的方案,这种方案叫做后端路由,即多页面应用。2 后端路由后端路由的好处是:服务端渲染后,可以直接返回给浏览器。...原创 2019-03-23 16:01:58 · 1119 阅读 · 0 评论 -
说说如何安装 Webpack
首先安装 Node.js 以及 NPM,可以参考这篇文章。1 初始化配置从命令行进入工程所在文件夹,输入以下命令,初始化配置:npm init运行结果:This utility will walk you through creating a package.json file.It only covers the most common items, and tries to ...原创 2019-02-24 16:03:38 · 678 阅读 · 0 评论 -
说说前端工程化利器 webpack
1 工程化前端自动化或者半自动化工程,需要实现以下功能:合并和压缩 Javascript、CSS 代码 。CSS 预处理: Less , Sass, Stylus 的编译。生成雪碧图(CSS Sprite)。ES6 转换为 ES5 语法。模块化。名称解析:Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CS...原创 2019-02-24 14:54:40 · 256 阅读 · 0 评论 -
说说如何在 Linux 环境下安装 Jenkins
1 安装安装 jenkins 的 rpm 安装包:rpm -ivh jenkins-2.150.1-1.1.noarch.rpm2 配置修改配置文件:vi /etc/sysconfig/jenkins2.1 指定 JDK 路径因为我们把 jdk 8 解压后放置在:/usr/lib/jdk1.8.0_192(需要切换到 root 账号),所以这里把配置文件中的 JENKINS_...原创 2019-01-29 17:14:50 · 555 阅读 · 0 评论 -
PowerDesigner 数据库表脚本包含双引号问题的解决方法
在 PowerDesigner 中的 Database -> Edit Currnet DBMS -> Script -> Sql -> Format -> CaseSensitivityUsingQuote 中选择 No,即可:是不是很简单呀 O(∩_∩)O哈哈~原创 2018-07-17 17:04:58 · 800 阅读 · 0 评论 -
说说如何使用 PowerDesigner 连接 MySQL 并生成逆向工程图
1 配置环境变量Tools → General Options → VariablesGeneral Options 在最后,要一直往下拉才会看到。注意: PowerDesigner 的 32 位与 64 位是有区别的,PowerDesigner 位数必须与 JDK 的位数相同。接着配置 CLASSPATH 环境变量,用于指定 mysql 的驱动包:如果没有配置此项,将...原创 2018-04-30 19:58:46 · 429 阅读 · 0 评论 -
手把手教你安装和配置 Jenkins 持续集成服务器
1 下载首先到 jenkins 的官网 上下载对应操作系统版本的 war 包。注意:jenkins 2.x 不支持安装在 windows server 2007 及之前版本的操作系统上,因为 jenkins 2.x 用了 jdk1.8,而 jdk1.8 及之后的版本,在这些老系统上双击是不会有反应的。所以如果服务器安装的是这些老的操作系统,就只能使用 jenkins 1.x 咯,切记!原创 2018-01-19 18:23:48 · 2449 阅读 · 0 评论 -
说说大型网站分布式服务框架的设计思想
1 网站功能持续膨胀后的困境与应对方式原先的网站架构是这样的:在业务量比较小(日均百万笔订单)的情况下,可以很好地支撑系统业务。但随着业务量的继续扩大,我们可能会想通过增加应用服务器的数量来处理这些新增的业务量,但这又给数据库的连接带来新的压力。而且,随着网站规模的增大、开发人员的增多,每个应用都变得复杂而臃肿,而且存在重复的代码。这样的状况影响到了整体的研发效率,而且对稳定性也造成了一定的影响。这原创 2017-12-01 15:48:52 · 1008 阅读 · 0 评论 -
带你进入 Git 的世界
1 版本控制系统版本控制系统是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。一般情况下,对软件源代码的文件进行版本控制,但实际上,你可以对任何类型的文件进行版本控制。有了版本控制系统,你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷原创 2017-12-01 11:29:04 · 529 阅读 · 0 评论 -
说说网站限时秒杀系统的架构设计
时值双十一在即,各大网站都在争相进行限时秒杀的促销活动。秒杀是一种常见的营销手段,它指的是把少量的商品(一般是一件)以极低的价格,在特定的时间点开始销售。这些商品一般在活动开始的第一秒内就被买走咯,所以称之为秒杀。网站通过这种营销手段,制造轰动效应,已达到网站推广的目的。其实很多网站已经把秒杀活动常态化咯,它们会经常性地举行秒杀活动。秒杀对技术是一种极大的挑战,因为秒杀活动带来的并发访问量是平时的数原创 2017-11-09 15:42:29 · 1563 阅读 · 1 评论 -
说说如何实现可扩展性的大型网站架构
网站的可扩展性架构设计,能够在对现有系统影响最小的情况下,系统功能可以可持续扩展及提升的能力。在此,对容易混为一谈的 “扩展性” 和 “伸缩性” 的概念进行详细说明:扩展性表现为:基础设施不需要经常变更,应用之间较少依赖或耦合,可以对需求变更快速响应。它对扩展开放,对修改关闭。架构设计会考虑到未来功能的可扩展性,所以当系统增加新功能时,不需要对现有系统的结构和代码进行修改。伸缩性是指系统通过增加(或原创 2017-11-06 15:40:05 · 16641 阅读 · 0 评论 -
说说大型网站可伸缩性架构的设计原理
可伸缩性架构指的是:不改变网站的软硬件设计,只通过改变部署的服务器数量就可以扩大或缩小网站的服务处理能力。大型网站中的 “大型”,可以表现在以下几个方面: * 用户方面 - 大量的用户与大量访问(Facebook 有超过 20 亿的用户数) * 功能方面 - 功能庞杂,产品众多(腾讯有超过 1700 种产品) * 技术方面 - 部署大量的服务器(Google 有近 200 万台服务器)大型网站原创 2017-11-01 16:06:26 · 3438 阅读 · 0 评论 -
说说如何实现高可用的网站架构
网站的可用性强调的是对最终用户的使用价值。它牵动着人们的神经,直接影响着公司的形象和利益,许多互联网公司都将网站的可用性列入工程师的绩效考核,与奖金、升迁等利益直接挂钩。1 可用性的度量与考核1.1 可用性度量网站不可用时间(故障时间) = 故障修复时间点 - 故障发现(报告)时间点网站年度可用性指标 = (1 - 网站不可用时间/年度总时间 ) * 100%业界通常用多个 9 来衡量网站的可用性:原创 2017-10-20 16:47:25 · 3718 阅读 · 0 评论 -
说说如何实现高性能的网站架构
性能既是客观指标,诸如响应时间、吞吐量等技术指标;又是实际参与者的主观感受。1 性能测试性能测试是性能优化的前提与基础,也是优化结果的检查与度量标准。1.1 不同视角下的性能1.1.1 用户视角用户在浏览器上感受到网站响应速度的快慢,包括用户计算机与服务器通信的时间、服务器处理时间以及浏览器构造请求、解析响应数据的时间。在实践中有这些前端架构优化手段: 1. 优化页面 HTML; 2. 调整浏览原创 2017-10-06 14:59:14 · 1420 阅读 · 0 评论 -
说说大型网站架构的核心要素
架构,是最高层次的规划,难以改变的决定。这些规划与决定决定了事物发展的方向与最终蓝图。而软件架构指的是:有关软件的整体结构与组件的抽象描述,可用于指导大型软件系统各个方面的设计。这些部分可以是具体的功能模块,也可以是非功能的设计与决策,它们共同组成了软件系统的架构。下面我们会说说大型网站架构的五大核心要素:性能、可用性、伸缩性、扩展性以及安全性。1 性能性能是一个重要的指标。一个打开缓慢的网站会导致原创 2017-09-22 14:49:27 · 653 阅读 · 0 评论 -
说说大型网站的架构模式
在建筑领域是这样描述模式的:每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案核心。我们可以一次又一次地使用这个方案而不必做重复的工作。模式的关键是可重复性,问题和场景的可重复性带来解决方案的可重复性。目前的网站架构有一些共同的模式(思路与解决方案),它们已经被大型网站一再验证,所以可以指导我们的架构设计。1 分层在横向维度上把系统划分为 3 层,每一层负责相对单一的职责,通过上层原创 2017-09-20 15:05:27 · 564 阅读 · 0 评论 -
说说大型网站架构的演化历程
现今,全球有近一半的人口在使用互联网,人们的生活因互联网而发生了巨大的改变。在互联网跨越式的发展历程的背后是不堪重负的网站架构,某些 B2C 网站逢促销必宕机似乎成为一种必然的规律,最著名的例子就是早期的铁道部的电子客票售卖平台O(∩_∩)O~1 大型互联网应用的特点高并发,大流量:面对的是高并发的用户以及大流量的访问。高可用:系统 7 * 24 小时不间断服务。海量数据:需要存储并管理海量的原创 2017-09-14 17:59:39 · 1201 阅读 · 0 评论