![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Web相关技术
文章平均质量分 75
不止思考
这个作者很懒,什么都没留下…
展开
-
聊聊微服务架构
《聊聊微服务架构》原创 2020-12-09 10:28:43 · 838 阅读 · 0 评论 -
架构设计之「 微服务入门 」
微服务这几年不可谓不火,很多技术团队都开始在自己的项目上引入了微服务。一方面这些团队确实很好的推动了微服务的应用和发展,另一方面也可以看到一些盲目追技术热点的行为所带来的危害,比如很多中小团队对微服务的基础知识只是做了很浅显的了解就开始盲目的推动微服务的实施,最后导致了项目的失败。微服务要想做好是一个非常复杂的架构,今天就先只聊一聊微服务的一些基础架构,算是入门篇。一、什么是「 微服务...原创 2019-03-28 12:48:08 · 307 阅读 · 0 评论 -
算法的时间与空间复杂度(一看就懂)
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算...原创 2018-11-21 11:17:45 · 68727 阅读 · 37 评论 -
架构设计之「数据库集群方案」
在之前的文章中,我们知道数据库服务可能已经成为了很多系统的性能关键点,甚至是瓶颈了。也给大家介绍了数据库服务器从主备架构、到主从架构、再到主主架构的基础方案。但如果单台机器已经不能满足完整业务数据存储的时候,我们就需要考虑采用多机甚至多中心的部署方案了。今天我们就再来聊一聊,在多机环境下,数据库集群的架构方案。同样,这里先不看细节,不管底层数据源是什么数据库,我们先谈架构方案。因为无论底层...原创 2018-09-30 12:40:48 · 1053 阅读 · 0 评论 -
架构设计之「数据库从主备到主主的高可用方案」
在互联网项目中,当业务规模越来越大,数据越来越多,随之而来的就是数据库压力会越来越大。慢慢就会发现,数据库层可能已经成为了整个系统的关键点和性能瓶颈了,因此实现数据层的高可用就成为了我们项目中经常要解决的问题。本文我们就来聊一聊如何实现数据存储层的高可用方案。在保障数据层的高性能与高稳定方面,最容易想到的方式就是对数据进行分片、多份、冗余等,很多架构的本质其实也是基于这几点来实现的。这里先...原创 2018-09-27 19:21:24 · 3819 阅读 · 0 评论 -
网络中的「动态路由算法」,你了解吗?
在计算机网络中,路由器的一个很重要责任就是要在端对端的节点中找出一条最佳路径出来,通过自己与相邻节点之间的信息,来计算出从自己位置到目的节点之间的最佳线路,这类算法我们称之为路由算法。路由的模式又主要分为「静态路由」和「动态路由」。静态路由协议是由网络管理员手动输入配置的,适用于小型的不太复杂的网络环境中,或者有特定需求的网络场景中。而动态路由协议是现代计算机网络中最为常用的一种方式。动态路由算...原创 2018-09-21 10:34:12 · 3864 阅读 · 0 评论 -
当你「ping 一下」的时候,你知道它背后的逻辑吗?
当你「ping 一下」的时候,你知道它背后的逻辑吗?我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?一、「ping」命令的作用和原理?简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不...原创 2018-09-13 15:38:36 · 231 阅读 · 0 评论 -
不懂高性能的负载均衡设计?没关系,架构师带你飞
不懂高性能的负载均衡设计?架构师带你飞在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,其重要性不言而喻。一、什么是负载均衡?早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求。随着现在互联网的流量越来越大,稍微好一点的系统,访问量就...原创 2018-09-06 19:49:33 · 536 阅读 · 0 评论 -
数据库的这些性能优化,你做了吗?
数据库的这些性能优化,你做了吗?在互联网项目中,当业务规模越来越大,数据也越来越多,随之而来的就是数据库压力会越来越大。我们可能会采取各种方式去优化,比如之前文章提到的缓存方案,SQL优化等等,除了这些方式以外,这里再分享几个针对数据库优化的常规手段:「数据读写分离」与「数据库Sharding」。这两点基本上是大中型互联网项目中应用的非常普遍的方案了。下面我们来详细看一看,一、...原创 2018-08-21 18:46:08 · 365 阅读 · 0 评论 -
架构师带你玩转分布式锁
大多数互联网系统都是分布式部署的,分布式部署确实能带来性能和效率上的提升,但为此,我们就需要多解决一个分布式环境下,数据一致性的问题。当某个资源在多系统之间,具有共享性的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时刻有人写有人读,大家访问到的数据就不一致了。一、我们为什么需要分布式锁?在单机时代,虽然不需要...原创 2018-08-24 12:04:39 · 160 阅读 · 0 评论 -
缓存服务的更新策略有哪些?
缓存服务的更新策略有哪些?在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载。1、为什么需要缓存?一般在项目中,最消耗性能的地方就是后端服务的数据库了。而数据库的读写频率常常都是不均匀分布的,大多情况是读多写少,并且读操作(select)还会有一些复杂的判断条件,比如 like、group、join 等等,这些语法是非常消耗性能的,所...原创 2018-08-17 13:06:16 · 6190 阅读 · 0 评论 -
架构设计之「服务隔离」
我们在做系统架构设计的时候,经常离不开的一个话题就是进行服务的隔离设计。那什么是「服务隔离」呢? 顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。其实隔离设计并非软件行业独创,它是借鉴于造船行业。如上图,造船行业有一个专业术语叫做「舱壁隔离」...原创 2018-08-03 10:25:16 · 441 阅读 · 0 评论 -
架构设计之「服务限流」
上一篇我们聊过了架构设计中的「服务隔离」模式,今天我们继续来探索一下在分布式系统架构中的另一个常用的设计:服务限流。那么,什么是「服务限流」呢? 在解释「服务限流」之前,我们来看一下前些时间网上很火的一个段子,说的是新浪微博的一名工程师正在家里办婚礼,突然接到公司的电话要紧急处理线上流量激增的问题,那天应该是某当红明星突然在微博上公布恋情,微博流量突增好几倍,导致系统功能出现不稳定,用户...原创 2018-07-31 18:37:51 · 578 阅读 · 0 评论 -
RAID磁盘阵列是什么(一看就懂)
在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制。另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失。因此大家就在想,有没有一种办法将多块独立的磁盘结合在一起组成一个技术方案,来提高数据的可靠性和I/O性能呢。在这种情况下,RAID技术就应运而生了。一、RAID 是什么?RAID ( Redundant Arr...原创 2018-11-29 10:49:12 · 12166 阅读 · 0 评论 -
架构设计之「 CAP 定理 」
在计算机领域,如果是初入行就算了,如果是多年的老码农还不懂 CAP 定理,那就真的说不过去了。CAP可是每一名技术架构师都必须掌握的基础原则啊。现在只要是稍微大一点的互联网项目都是采用 分布式 结构了,一个系统可能有多个节点组成,每个节点都可能需要维护一份数据。那么如何维护各个节点之间的状态,如何保障各个节点之间数据的同步问题就是大家急需关注的事情了。CAP定理是分布式系统中最基础的原...原创 2019-03-15 10:43:46 · 936 阅读 · 0 评论 -
算法一看就懂之「 递归 」
之前的文章咱们已经聊过了「 数组和链表 」、「 堆栈 」和「 队列 」,今天咱们来看看「 递归 」,当然「 递归 」并不是一种数据结构,它是很多算法都使用的一种编程方法。它太普遍了,并且用它来解决问题非常的优雅,但它又不是那么容易弄懂,所以我特意用一篇文章来介绍它。一、「 递归 」是什么?递归就是指函数直接或间接的调用自己,递归是基于栈来实现的。递归的经典例子就是斐波拉契数列(Fi...原创 2019-09-12 11:09:39 · 442 阅读 · 0 评论 -
算法一看就懂之「 队列 」
算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结构,并且都在操作上受到一定规则约束,都是非常常用的数据类型,咱们掌握得再熟练也不为过。一、「 队列 」是什么?队列(queue)是一种先进先出的、操作受限的线性表。队列这种数据结构非常容易理解,就像我们平时去超...原创 2019-09-12 11:08:35 · 855 阅读 · 0 评论 -
算法一看就懂之「 堆栈 」
上一篇咱们聊完了数据结构中最基础的「 数组 」和「 链表 」,今天咱们再来继续看看「 堆栈 」吧,我写技术文章很少 show code,所以经常有人吐槽。好吧,这个算法系列的文章我打算每一篇的结尾处都找一道算法题写出代码示例,这总可以了吧。一、「 堆栈 」是什么?堆栈(stack)是一种先进后出的、操作受限的线性表,也可以直接称为栈。可以把栈想象成一个桶一样,往这个桶里面一层...原创 2019-09-12 11:07:14 · 890 阅读 · 0 评论 -
算法一看就懂之「 数组与链表 」
数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功。大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多。其实也不是真的用得少,只不过我们在使用的时候被很多高级语言和框架组件封装好了,真正需要自己去实现的地方比较少而已。但别人封装好了不代表我们就可以不关注了,数据结构作为程序员的内功心法,是非常值得我们多花时间去研究的,我这就翻开书...原创 2019-09-12 11:06:17 · 276 阅读 · 0 评论 -
微服务架构之「 容器技术 」
现在一聊到容器技术,大家就默认是指 Docker 了。但事实上,在 Docker 出现之前,PaaS社区早就有容器技术了,以 Cloud Foundry、OpenShift 为代表的就是当时的主流。那为啥最终还是 Docker 火起来了呢?因为传统的PaaS技术虽然也可以一键将本地应用部署到云上,并且也是采用隔离环境(容器)的形式去部署,但是其兼容性非常的不好。因为其主要原理就是将本...原创 2019-09-12 11:04:06 · 346 阅读 · 0 评论 -
微服务架构之「 下一代微服务 Service Mesh 」
Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的非常多。我在大家的讨论中,还看到有人说 “目前的微服务架构我都没学会呢,现在又来一个下一代微服务,真学不动了”。哈哈,没办法,互联网技术就是发展得这么快,这些技术其实也都是由于大家所在的公司业务规模和复杂度变大以后所推动出来的。最开始 Service Mesh 的概念是由Buoyant公司在20...原创 2019-07-11 13:08:41 · 228 阅读 · 0 评论 -
微服务架构之「 容错隔离 」
我们知道,在单体应用的架构下一旦程序发生了故障,那么整个应用可能就没法使用了,所以我们要把单体应用拆分成具有多个服务的微服务架构,来减少故障的影响范围。但是在微服务架构下,有一个新的问题就是,由于服务数变多了,假设单个服务的故障率是不变的,那么整体微服务系统的故障率其实是提高了的。比如:假设单个服务的故障率是0.01%,也就是可用性是99.99%,如果我们总共有10个微服务,那么我们整体的...原创 2019-06-04 16:38:28 · 603 阅读 · 0 评论 -
微服务架构之「 访问安全 」
应用程序的访问安全又是我们每一个研发团队都必须关注的重点问题。尤其是在我们采用了微服务架构之后,项目的复杂度提升了N个级别,相应的,微服务的安全工作也就更难更复杂了。并且我们以往擅长的单体应用的安全方案对于微服务来说已经不再适用了。我们必须有一套新的方案来保障微服务架构的安全。在探索微服务访问安全之前,我们还是先来回顾一下单体应用的安全是如何实现的。一、传统单体应用如何实现「访问安全」...原创 2019-06-13 12:28:17 · 3071 阅读 · 0 评论 -
微服务架构之「 调用链监控 」
「 调用链监控 」是在微服务兴起后才有的一种新流行的监控模式。因为在我们传统单体应用的项目中,不存在服务链/调用链的概念,所以也就根本没有调用链监控的需求了。当我们开始微服务架构之后,我们的很多服务变成分布式的了,并且我们对服务进行了拆分,拆分之后,用户的一个请求进来,会依次经过不同的服务节点进行处理,处理完成后再返回结果给用户。那么在整个处理的链条中,如果有任何一个节点出现了延迟或者问题,都...原创 2019-05-28 16:17:09 · 1892 阅读 · 0 评论 -
微服务架构之「 配置中心 」
在微服务架构的系列文章中,前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」。后面还会继续介绍 服务框架、服务监控、服务治理等。还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳、走的远。「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统。虽然听起来很简单,但...原创 2019-05-17 13:52:54 · 3395 阅读 · 2 评论 -
微服务架构之「 监控系统 」
在微服务架构的系列文章中,前面已经通过文章分别介绍过了微服务的「服务注册 」、「服务网关 」、「配置中心 」,今天这篇文章我们继续来聊一聊另外一个重要模块:「 监控系统 」。因为在微服务的架构下,我们对服务进行了拆分,所以用户的每次请求不再是由某一个服务独立完成了,而是变成了多个服务一起配合完成。这种情况下,一旦请求出现异常,我们必须得知道是在哪个服务环节出了故障,就需要对每一个服务,以及...原创 2019-05-21 14:19:40 · 3539 阅读 · 4 评论 -
如何应对线上故障
如何应对线上故障线上故障是我们技术同学经常遇到,也是技术成长中经常要经历的事。从故障中我们可以吸取到很多教训,变得越来越有经验。但是并不是每一个团队/技术同学在应对故障的处理方式上,都能做到合理和科学。下面我就从线上故障的应对和处理方面,简单的聊一聊我的看法。故障发生时的处理:1、快速定位故障在复杂的系统架构中,尤其是微服务架构中,一旦发生故障可能会出现“多米诺骨牌...原创 2018-07-30 20:13:14 · 1084 阅读 · 0 评论 -
避免无休止的技术辩论,需要一套有效的决策流程
这里说的讨论,更多的是指技术讨论。在互联网项目开发中,同样一套功能,往往会有很多种技术实现方案。 由于每个开发成员的技术背景和经验的不同,可能会产生很多不同的想法。其实本质上讲,这种技术思维的碰撞,是一件好事情,既能开阔视野,又能择最优方案实施,岂不是完美。比如,列出各种技术方案的优缺点,再结合实际业务情况,选择出一种最适合当前项目的方案即可。但往往并非这么简单,因为每人认可的那个“最合适的原创 2016-01-09 01:25:31 · 1092 阅读 · 0 评论 -
mysql数据导入导出语句
导出:SELECT * from ebook INTO OUTFILE "bookdev.txt" FIELDS ENCLOSED by " TERMINATED by "," LINES TERMINATED BY " " 导入:LOAD DATA INFILE "bookdev.txt" into TABLE ebook FIELDS ENCLOSED by " TERMINAT原创 2009-02-27 13:48:00 · 757 阅读 · 0 评论 -
简单工厂(Simple Factory)模式
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 一、 简单工厂(Simple Factory)模式 简单工厂模式是类的原创 2009-02-27 14:01:00 · 685 阅读 · 0 评论 -
单例(Singleton)模式
一、单例(Singleton)模式 单例模式的要点有三个:一是某个类只能有一个实例,二是它必需自行创建这个实例,三是它必须向整个系统自行提供这个实例.二、饿汉式单例类饿汉式单例类是一个典型的单例类,下面是一个它的实现:/** 饿汉式单例类,不能被继承*/public class HungrySingleton { /* * Singleton类自己将自己实例化 *原创 2009-02-27 13:59:00 · 970 阅读 · 0 评论 -
Java正则表达式入门
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的原创 2009-02-27 13:55:00 · 730 阅读 · 0 评论 -
计算机常用端口一览表
1 传输控制协议端口服务多路开关选择器 2 compressnet 管理实用程序 3 压缩进程 5 远程作业登录 7 回显(Echo) 9 丢弃 11 在线用户 13 时间 15 netstat 17 每日引用 18 消息发送协议 19 字符发生器 20 文件传输协议(默认数据口) 21 文件传输协议(控制) 22 SSH远程登录协议 23 telnet 终端仿真协议 24 预留给个人用邮件系统原创 2009-02-27 13:39:00 · 534 阅读 · 0 评论 -
实现对象的序列化和反序列化
序列化是把一个对象的状态写入一个字节流的过程,它执行RMI,RMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象方法,对象可以作为参数提供给那个远程方法,发送机序列化该对象并传送它,接收机执行反序列化。 序列化和反序列化的关系图表可形成包含循环引用的顺序图表。这是整个序列化的总体思想。 而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复原创 2009-02-27 13:37:00 · 990 阅读 · 0 评论 -
java中多种方式读文件,追加文件内容,对文件的各种操作
一、多种方式读文件内容。1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容4、随机读取文件内容 import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import jav原创 2009-02-27 12:28:00 · 2925 阅读 · 0 评论 -
Java的时间处理
1. Java计算时间依靠1970年1月1日开始的毫秒数. 2. Date类的构造函数Date()返回代表当前创建的时刻的对象。Date的方法getTime()返回一个long值在数值上等于1970年1月1日之前或之后的时刻。3. DateFormat类用来转换Date到String,反之亦然。静态方法getDateInstance()返回DateFormat的缺省格式; g原创 2009-02-27 12:24:00 · 715 阅读 · 0 评论 -
String理解
要理解 java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。什么是非可变类呢?简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。java为什么要把String设计为非可变类呢?你可以问问 james Gosling :)。但是非可变类确实有着自身的优势,如状态原创 2009-02-27 11:17:00 · 455 阅读 · 0 评论 -
Java中几种常用数据类型之间转换的方法
1. short-->int 2. int-->short exp: short shortvar=0; exp: short shortvar=0; int intvar=0; in原创 2009-02-27 10:09:00 · 571 阅读 · 0 评论 -
java经典反射机制
我想每个喜欢程序的人,肯定都曾经有过这样的想法:用100行代码完成普通人需要10000行代码才能完成的功能。这是痴心妄想吗?我想,这起码比我们程序员用自己赚的钱买栋房子现实的多。一门语言,当你觉得已经对它非常熟悉但是又并没有用它写出非常精妙的代码时,你就该好好思考一下:是不是自己画地为牢,其实还没有进入语言的高级地段?! 在Java语言中,核心概念很多,反射绝对是其中非常抢眼的一个。Ja转载 2009-03-04 17:29:00 · 794 阅读 · 0 评论 -
在JAVA中读取URL归纳
<br />a) 在JAVA中读取URL归纳:目前最常用的就是用两种,<br /> i. 第一种是,只是用jdk自带类,不依赖其它第三方jar包的形式:。<br />1. url参数直接附加在url尾部: Url myUrl = new Url(str); UrlConnection con = myUrl.openConnection(); BufferedReader bfr = new BufferedReader( new Inpu原创 2010-12-23 11:38:00 · 2002 阅读 · 0 评论