了解Unix的历史与现状
了解Unix的历史与现状
1 操作系统的分类目前市面上大部分的操作系统都可以分为两类:一类是基于微软Windows NT内核的操作系统,而剩余其他几乎所有的操作系统的祖先都是Unix。
比如Linux,Ubuntu,Mac OS X,安卓Andoird,iOS,Chrome OS以及PS4上面的Orbis OS,这些跑在各种各样硬件上面的操作系统,它们的祖先都是Unix操作系统,所以通常也被叫做“类Unix”操作系统。
2 Unix的设计无处不在Unix于上个世纪60年代(1960s)在传奇的AT&T的贝尔实验室研制,其中一些非常重要的设计理念仍然在流传至今。
秉承着Unix哲学中的“做一件事并且把它做好”,Unix设计并实现了一系列独立、小巧、模块化的优秀实用工具,比如管道,输出重定向,后台执行等等,你可以通过将这些工具进行不同方式的组合来完成更加复杂的任务。这也极大降低了shell脚本的编写难度,也让shell脚本能够完成更加复杂的任务。
”在Unix里一切都是文件“也同样是Unix的经典设计之一。硬件设备,目录,特殊文件,普通的数据文件,所有的内容在Unix看来都是文 ...
2. 如何本地安装与调试ES
理解ES最简单的方式就是实际上手使用一把,所以这一节主要介绍如何在本地搭建一套可以随心所欲操作、使用的ES环境。
1 安装选型说明1.1 ES版本选择考量本系列使用ES 7.10版本作为讲解样例
截止到目前撰稿日期,已经推出了ES 8.0版本,有众多的改动和新特性,考虑到:
目前ES 7.11 之后开源协议进行了变更,不再适合企业大规模商用
在未来一段时间,市面上目前6.x 和 7.x 仍然是主流
所以本系列使用ES 7.10的版本作为讲解样例,一方面是:
7.x是先进且主流的版本,具有所需要的绝大部分的功能特性
另一方面7.10是Apache 2.0开源协议授权的最新也是最后一个ES版本了,我们可以基于这个版本进行更自由的二次开发、改造与发布
1.2 安装方式选型本系列使用Docker进行ES学习环境的搭建
如果是大规模的搭建部署,企业内通常有专职的团队或者成员来负责,如果是出于学习目的,笔者希望使用尽可能简单,干净,通用的方式来进行ES环境的搭建与安装 => Docker安装。
Docker可以安装在任何的平台(x86,ARM,Windows,Linux, ...
谈谈数据的增量更新
谈谈数据的增量更新在数据同步的过程中,必然会遇到数据增量更新的需求。但如果没有一个有效的数据增量更新的设计与机制,可能每次上游数据更新时,你都需要将全量的数据同步一遍,即使只有1%的数据发生了更新。
全量数据同步在数据首次同步的时候是需要的,而且定期的全量同步也能够修复一些偶发的数据不完整的问题。
但是全量同步作为定期的增量数据更新方式并不是十分合适的,因为:
耗时长:对于具有一定规模的数据量,全量同步通常需要较长的时间,比如几个小时,几天甚至几周,所以全量同步经常无法提供实时或者准实时的数据更新服务;
占用资源:全量同步会对数据源和全量同步目标同时产生较高的计算压力,可能会影响平台其他的计算、分析服务;
带宽占用:全量同步会占用较大的网络带宽,可能会导致网络产生抖动。
随着数据量的增长,上面几个问题的影响也会变得越来越明显。
如果要做数据的增量更新,你必须在数据源上能找到定位数据更新/变化的方式,这个概念叫做CDC-Change Data Capture-数据变化捕捉。
在实现过程中,有若干种常见数据变化捕捉方式,但以下两种比较常见。
1 基于每一行的更新时间戳来做增 ...
我们为什么需要幂等
我们为什么需要幂等幂等(Idempotence)指的是如果我们反复执行一个方法,如果方法的输入不变,那么第一次执行的结果和第n次执行的结果应该是一样的。
在数据处理和计算过程中这是一个非常重要的概念,是确保整个数据处理流程健壮性的关键要素之一,也是保证整个过程可重现可追溯的重要特性。
在现实生活中,也有很多符合幂等特性的例子与场景,比如电梯的楼层按钮,比如路口的行人过街按钮都是幂等的:不论重复执行(按下/点亮)多少次,结果都是固定且稳定的。
1 幂等在数据一致性上的重要性1.1 数据写入比如我们在数据库具有如下的数据:
id
name
score
1
张三
95
2
李四
97
现在需要从数据源同步过来新的数据:
id
name
score
3
王五
99
我们期望的结果是:
id
name
score
1
张三
95
2
李四
97
3
王五
99
在实际的数据同步过程中,我们通常会需要进行增量同步:
找到上一次同步的标记位,比如id=2
基于找到的标记位,写入后续的数据,即id > 2的数据
...
1. ES版本与开源简介
诞生背景现有的技术在数据的结构化和存储方面已经做的很好了,但是在硬盘上的原始数据并不能充分发挥数据的价值,尤其是当你需要基于这些数据做一些实时的决策时,就更容易出现使用上的困难。
ES是一个 分布式,可扩展,实时 的搜索与数据分析引擎,能够有效解决在全文搜索 或者 结构化数据的实时分析问题。
不只是大型企业,如Wikipedia,Guardian,Stack Overflow,GitHub在使用。它也可以在你的笔记本上运行,或者扩展到几百台服务器,服务数PB的数据。
ES带来了革命,但是ES并没有使用或者创造革命性的技术:全文搜索,数据分析和分布式数据存储都是已经有的技术概念。ES是通过将这三个独立的部分进行了巧妙地融合成了一个独立的、实时的应用程序,这才是ES带来的革命。
目前,大多数数据库在从数据中提取可操作的知识方面都出奇地无能。虽然他们可以通过时间戳进行筛选或者提取特定的字段,但是它们不能轻松的进行全文搜索,进行同义词搜索以及对数据进行相关性排序。
更重要的是,面对具有一定规模的数据,如果不对数据做大量的离线预处理、批处理,大多数数据库是无法提供实时服务的。
ES简介ES是在 ...
常用的CSS选择器场景
说明近期做了一个小测验,上面设计的题目能够覆盖较多的CSS选择器的场景,特此将其总结记录出来可以更直观的参考。
1 定位到ul元素中的第一个li元素12345<ul> <li></li> ⭐ <li></li> <li></li></ul>
实现1li:first-child
参考语法说明CSS/:first-child
2 定位到div元素中没有class的p元素123456<div> <p></p> ⭐ <p class="foo"></p> <p></p> ⭐ <p></p> ⭐</div>
实现1p:not(.foo)
参考语法说明CSS/:not
3 定位到ul元素中第3,5,7个li元素123456789<ul> <li></li> <li></li ...
CSRF与SameSite
什么是Cookie为了解释CSRF与SameSite的成因、关系与历史,我们首先需要对Cookie有一个基础的了解。
我们知道,HTTP请求本身是无状态的,正常来说,服务端收到请求后并不知道请求者是谁;
所以为了记录用户的标识信息,来提供更好更便捷的网络服务,Cookie应运而生。
就好像我们使用ATM服务(HTTP服务)一样,没有插入银行卡(Cookie)之前,机器并不知道面前的人是谁,有多少余额,甚至不让你使用大部分的功能;但是当你插入之前银行发售(SetCookie)给你的银行卡(Cookie)之后,ATM服务(HTTP服务)就能够认识你,并提供针对你的服务。
如图,可以看到大家[耳]熟能详的Cookie数据流过程。
首先,用户在浏览器中请求目标网站,请求内容是自己的身份信息(比如登录或者注册)。
服务收到用户信息后,会在这个HTTP请求的返回中给浏览器SetCookie的指令,并带上一串能够代表这个用户的id(银行卡号),浏览器收到SetCookie后,会将这个网站id在浏览器中进行存储。
当用户再次请求这个网站的其他HTTP服务时(比如获取购买记录),浏览器会自动检测本地 ...
完美解决Chrome Cookie SameSite跨站限制
问题背景在前后端分离的大趋势下,如果没有额外的配置部署方案,前端地址和后台API地址是不一样的。比如在本地开发调试阶段,前端地址为http://localhost:3000,后台API地址为http://api.server.com/api/list。
那么地址不一样会有什么问题呢?
如果你请求的后台API需要携带Cookie进行鉴权,那么在这种地址不一样的情况下,会因为浏览器的Cookie SameSite的跨站限制,导致Cookie不会被正确传递,进而导致请求API接口总是报错没有认证或者权限不足。
什么是Cookie SameSite
2016年开始,Chrome 51版本对Cookie新增了一个SameSite属性,用来防止CSRF攻击。
简单来说,在新版本的浏览器上,如果前端地址和请求的API地址的domain不一样的话,则会限制携带Cookie。
具体什么是CSRF攻击,跨站与跨域的区别,可以参见我另外的文章。
在Chrome上如何解决Cookie SameSite限制1234567如果想从原理上解决1. 如果有nginx等反向代理工具,则可以通过配置将前端地址与API ...
不小心删除了docker容器怎么恢复?
如果不小心执行了docker rm 容器A,通过查找到docker volumes中删除容器的数据,将其挂载到新启动的容器中,即可恢复应用+状态+数据。
背景docker作为优秀的开源容器引擎,能够像集装箱一样以一种非常标准化、轻量、可移植的方式帮助我们进行开发、交付和运行应用程序。
当镜像运行起来成为容器时会需要相关的存储资源来支撑软件服务的运行,如存储的日志文件,用户传入的数据,伴随运行生成的文件等。
由于docker运行程序实在是太便利了,在有些时候,一些用于调试的docker项目(自研、开源),不知不觉就投入了使用,并没有对数据做很合理安全的配置(挂载,备份),此后如果一不小心删除了运行中的容器,再启动镜像时,就会发现这是一个全新的服务,之前程序运行过程中积累的状态数据、用户数据、日志数据不复存在。
最近就遇到了这个问题:之前调研了一个开源的OA系统,在测试阶段,很好用,对接了内部的认证系统后,很多同事纷纷上去试用,不知不觉积累了很多数据。
直到有一天,运维同事在这个开发环境为了升级相关服务,便执行了如下容器删除语句:
1docker rm {这个OA容器 ...
如何在MacOS中进行声音内录
问题背景在MacBook, iMac, Mac Pro, Mac mini等设备中,使用QuickTime Player进行屏幕录制时,只能录制麦克风的声音,无法对电脑本身播放的声音进行录制。
当遇到一些录音或者录屏场景需要录制电脑内部声音时就很不方便。
此时,就需要通过一些工具,来让QuickTime Player支持录制电脑内部的声音。
软件安装步骤1-下载
下载方式1: 我已经提前注册下载好安装包,可以直接点击这里下载
下载方式2: 官网下载 (需要翻墙,填写下邮箱,选择16ch版本)
步骤2-安装然后正常双击即可安装。
步骤3-验证打开系统自带的MIDI软件,可以看到左侧有“BlackHold 16ch”的选项,即安装成功。
配置方式1 打开MIDI软件
2 创建聚集设备点击左下角的加号,选择“创建聚集设备”
可以自定义一个名称,比如“我的QuickTime内录输入”
然后只勾选“BlackHole 16ch”即可,如图
原理说明:此设备是一个虚拟麦克风输入设备,它会将BlackHole 16ch这个设备的声音作为麦克风的输入
3 创建多输出设备点击左下角的加 ...