简洁明了的systemd的使用
简述背景:在systemd之前使用initd 管理服务(把启动脚本放在在/etc/init.d/下),但是有两个主要缺点:
线性(串行)启动导致启动时间过长
initd只负责在系统启动时启动启动脚本,若要处理脚本状态需要自己实现,导致脚本复杂
systemd设计目标
为服务启动和管理提供全套解决方案
可完全取代init.d ,性能更强,功能更多
功能系统管理综合(systemctl))123456789#常用命令# 重启systemctl reboot# 关闭电源systemctl poweroff# CPU暂停systemctl halt# 挂起systemctl suspend
用户(loginctl)12345678910list-sessions List sessionssession-status [ID...] Show session statusshow-session [ID...] Show properties of sessions or the manageractivate [ID] Acti ...
CPU简介
基本概念CPU:( CentralProcessingUnit): 中央处理单元,CPU不等于物理核,更不等于逻辑核,一个逻辑核包含多个物理核,一个物理核可以分成n个逻辑核
物理核(physical core): 可以看的到的,真实的cpu核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。
逻辑核( logical core,LCPU): 在同一个物理核内,逻辑层面的核。1LCPU=1THREAD
超线程( Hyper-threading, HT):时间管理大师,超线程可以在一个逻辑核等待指令执行的间隔把时间片分配到另一个逻辑核。同一物理核超出的逻辑核之间为兄弟线程;
虚拟核:使用虚拟化技术,超分出的核心,位于虚拟机中;
CPU Die(裸晶): 生产中引入概念,从晶圆上切下来的裸晶,通过片外总线互联,可以封装在一个Package中,die之间通过HT(HyperTransport)总线通信
CPU Package(封装):对应一个cpu socket的一个CPU;
双路服务器:主板上有两个cpu插槽(socket),多个处理器通过 QPI 链路相连;
对称多处理机(Sy ...
极简的极客法则
[toc]
写在前面原文是hacker-laws ,作者做了翻译、归纳、整理、夹带私货;阅读hacker laws 有助于coder 更好的开发; here we go!
定律90-9-1 法则 (90–9–1 Principle or 1% Rule)在诸如维基这样的互联网社区中,90% 的用户只看内容并不参与互动,9% 的用户会参与讨论,而只有 1% 的用户会创造内容。
阿姆达尔定律 (Amdahl’s Law)并行计算中,有些部分可以被多核心并行处理,有些部分只能串行处理,增加核心对速度的提升的收益会边际递减
破窗效应 (The Broken Windows Theory)在破窗理论中认为,恶化若不修复,会导致进一步更严重的恶化参见:
布鲁克斯法则 (Brooks’s Law)软件开发后期,添加人力只会使项目开发得更慢。因为有些事情无法分割,切增加沟通成本(和阿姆达尔有点像)《人月神话》大篇幅在讲这个
CAP 定理 (CAP Theorem or Brewer’s Theorem)CAP 定理由 Eric Brewer 所定义,它指出对于分布式数据存储来说,不可能同时满足以下三点 ...
从Typhoon台风到控制反转-依赖注入
最近这两天台风“烟花“ 肆虐长三角,偶然间看到ios开发中的Typhoon,那今天就聊聊依赖注入吧。
什么是Typhoon台风Typhoon 是Objective-C和Swift语言的轻量级依赖注入工具,功能较全,容易上手。
什么是依赖注入(Dependency Injection,DI)依赖注入是减少代码耦合度的一种常见方式。
在解释依赖注入之前我们要解释一下控制反转,因为依赖注入是实现控制反转的一种方式(另一种方式是依赖查找)。
什么是控制反转(Inversion of Control,IoC)控制反转是面向对象编程(OOP)的一种设计原则(SOLID原则的D依赖倒置原则),用来降低代码耦合度。
描述:类A需要用到类B中的对象o,必使得要在类A要获取类B的引用,类B实例创建过程如果在类A代码中实现会使得代码耦合度增大,更改类B中的代码,可能也要去更改引用了类B的代码,很不好用;而控制反转则是将创建类B实例的控制权从类A中剥离到IOC容器控制。
依赖注入与控制反转辨析控制反转是思想,依赖注入是技术,依赖注入是控制反转的一种实现方式。
依赖注入是从类A的角度描述的:类A需要依赖IOC容 ...
golang实现rsa加解密
概述
数字签名
加解密
对称
非对称
RSA算法
大整数的因数分解,是一件非常困难的事情(对目前的计算机算力和数学方法来说)。我们可以以此为数据加解密
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132package mainimport ( "errors" "fmt" "reflect" "strconv" "strings")func main() ...
奥卡姆剃刀和他的剃刀兄弟们
[toc]
在开发和生活中常听人说起奥卡姆剃刀以及若无必要,勿增实体,其实除了奥卡姆剃刀这个工具外还有很多其他有用的剃刀。
剃刀是什么剃刀又称哲学剃刀,英文名Philosophical razor,是帮人做决定一些经验法则,是一种粗略的不稳定的简化思决策工具,只能做出粗略的判断(经验上的),做出的决定更可能让你满意也有可能让你不满意(慎用)。
奥卡姆剃刀奥卡姆剃刀是什么奥卡姆剃刀英文名Ockham’s Razor,又称简约法则,14世纪提出,原教旨为‘entities should not be multiplied beyond necessity’,奥卡姆剃刀更像是从500/1000简化到1/2,而不是从汤汤(封面就是汤汤)是一只猫简化到汤汤是一种生物,更不是简化成汤汤是一种植物,当然奥卡姆剃刀也可以做一些微小的删除,但是请不要滥用!
通俗解释
更简单的解释更可能是正确的
假设越少越好
有哪些影响地心说对天体运行的描述是及其复杂的,日心说对天体的描述的简单的,虽然两者都可以同等相对正确的描述天体运行轨迹(都很粗糙,太阳系统中每个星体运行轨迹是很复杂的,老三体人了),除此之外还有 ...
三分钟入门分布式系统
[toc]
什么是分布式系统为了完成共同的任务,通过某种通信方式(一般是网络)使用多个计算机节点。这个由多个计算节点组成的系统就是分布式系统。通俗来说就是使用更多机器来处理问题,其实我们的互联网就是一个分布式系统。
为什么要使用分布式系统单节点计算、存储能力弱,硬件提升性价比低,应用消耗资源过于高时;要实现高可用、高并发时;可以无限的横向扩展
如何实现分布式简单来说就是对任务分而治之(贯穿整个计算机上下的底层思想,而且来源于生活),即是分片(partition),把不同分片交给不同节点处理即可,在未来保证可用性与并发性时,我们将分片冗余处理(一个分片交给多个节点处理)
CAP定理定理指的是一个经过逻辑证明的猜想;2000年布鲁尔提出此猜想2002年MIT的大佬给出证明
描述CAP定理指出一个分布式系统不能同时满足一下三点
一致性(Consistency)所有节点访问同一份最新的数据副本
可用性(Availability)每次请求都能获取到非错的响应
分区容错性(Partition tolerance)一个分布式系统中出现故障导致分裂成多个计算节点(区);这些区应能使系统正常运行,一般 ...
go逃逸分析
[toc]
go逃逸分析什么是逃逸内存从栈逃逸到堆中,会增大GC的压力
为什么要做逃逸分析申请到栈内存性能好,不会引起GC,函数返回直接释放
申请到堆内存会导致gc,引起性能问题
如何分配:
如果函数外部没有引用,则优先放到栈中;
如果函数外部存在引用,则必定放到堆中;
常见的三种逃逸
指针逃逸函数返回局部变量的指针导致指针逃逸
12345678910package mainfunc pointerEscapeFunc() *int{ var v int return &v}func main(){ pointerEscapeFunc()//v会被分配到堆上 return}
123host$ go build -gcflags '-m -l' tem.go #-m打印信息,-l忽略inline信息# command-line-arguments./tem.go:3:6: moved to heap: v #可见v被分配到了堆上
栈空间不足go的goroutine初始栈大小为2KB,go可 ...
Linux瓶颈分析
性能优化性能优化一项最重要的步骤就是寻找到系统的瓶颈
粗略分析系统响应慢,一般的瓶颈在IO、CPU、内存还有应用。
使用top查看
123456789101112131415[root@172-20-59-60 apt_ui]# toptop - 15:59:31 up 6 days, 1:10, 3 users, load average: 0.00, 0.01, 0.05Tasks: 144 total, 1 running, 142 sleeping, 0 stopped, 1 zombie%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 8009636 total, 5126364 free, 2307032 used, 576240 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 5396772 avail Mem PID USER ...
硬盘IO性能估算(IOPS,吞吐量,延时)
硬盘IO性能估算(IOPS,吞吐量,延时)说明磁盘种类
硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来储存,HDD采用磁性碟片来储存,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。
容量
硬盘的容量以兆字节(MB/MiB)、千兆字节(GB/GiB)或百万兆字节(TB/TiB)为单位,而常见的换算式为:1TB=1024GB,1GB=1024MB而1MB=1024KB。但硬盘厂商通常运用的是GB,也就是1G=1000MB,而Win系统,就依旧以“GB”字样来表示“GiB”单位(1024换算的),因此我们在BIOS中或在格式化硬盘时看到的容量会比厂家的标称值要小。
转速(Rotational Speed 或Spindle speed)
RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。
寻道时间 Tseek是指将读写磁头移动至正确的磁道上所需要的时间 ...