Posts

注册用户 /etc/matrix-synapse/homeserver.yaml registration_shared_secret: sudo systemctl restart matrix-synapse 配置代理 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt server { listen 443 ssl http2; listen [::]:443 ssl http2; # For the federation port listen 8448 ssl http2 default_server; listen [::]:8448 ssl http2 default_server; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; location ~* ^(\/_matrix|\/_synapse\/client) { proxy_pass http://localhost:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; # Nginx by default only allows file uploads up to 1M in size # Increase client_max_body_size to match max_upload_size defined in homeserver.

配置

  • 下载B2 TLS安全证书

    openssl s_client -showcerts -connect api.backblazeb2.com:443 > b2.crt
    
    mv b2.crt .minio/certs/CAs/
    
    set MINIO_ACCESS_KEY=B2_keyID
    set MINIO_SECRET_KEY=B2_applicationKey
    minio gateway b2
    

deploy VUE app under myweb context path server { listen 80; server_name 127.0.0.1; #listen 443 ssl; location /ibms/api/ { proxy_pass http://127.0.0.1:8080/; #proxy_set_header Host $http_host; add_header Cache-Control no-cache; add_header Pragma no-cache; add_header Expires 0; proxy_connect_timeout 200s; proxy_send_timeout 200s; proxy_read_timeout 200s; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header sn $http_sn; #405 重新代理 error_page 405 =200 http://$host$request_uri; } location /ibms { root /var/www/html; add_header Cache-Control no-cache; add_header Pragma no-cache; add_header Expires 0; #try_files $uri $uri/ @router; try_files $uri $uri/ /ibms/index.

https://www.sdxcentral.com/networking/virtualization/definitions/how-does-micro-segmentation-help-security-explanation/

give the wireless network higher priority than the wired WIRELESS CONNECTION > "Internet Protocol Version 4 (TCP/IPv4) Properties" > advanced TCP/IP setting > Automatic metric Uncheck it. That will enable a text box named “Interface metric”. Fill in a number. It needs to be larger than 1 (reserved for loopback) and the number(30) you choose for the wired network. WIRED CONNECTION > "Internet Protocol Version 4 (TCP/IPv4) Properties" > advanced TCP/IP setting > Automatic metric Again Uncheck “Automatic metric”, and fill in a number in the “Interface metric” box.

AppInfo 启动类型必须是自动或手动, 否则,msinstaller, services.msc, regedit 等都会报错: The Service command cannot be started, either because it is disabled or because it has no enabled devices associated with it AppInfo svchost.exe Facilitates the running of interactive applications with additional administrative privileges. Users will be unable to launch applications with the additional administrative privileges they may require to perform desired user tasks. These tools include regedit. Although safe to disable, this is not recommended since you need to boot into safe mode to enable again.

微服务认证和授权有很多方案, 这里比较各种主流方案的优缺点, 为你的业务系统选择MAA方案提供指南 方案 优点 缺点 分布式会话管理 简单,成熟,服务器统一管理 扩展性比较差 客户令牌 单点登录 API网关令牌管理 第三方应用授权 SSL/TLS 双向认证 方案 分布式会话管理 会话信息由服务器存储 实现方式: Sticky session Session replication Centralized session storage 客户令牌 令牌由客户持有 JWT: 头,负载和签名 头 { "typ": "JWT", "alg": "HS256" } 负载

之前一直用pycharm,今天把code升级到1.3.2的时候, 突然提示我安装python扩展,决定试试。 结果发现python的解释器设置有问题, 总是设置为系统的解释器, 而虚拟环境的解释器不起作用。

apt remove --purge python3.5
reboot

结果ubuntu桌面启动不了。好多应用程序例如chrome,virtualbox都消失了, 造成了很大的麻烦。

Ctrl+Alt+F1进入虚拟控制台登录

apt install python3.5
apt install ubuntu-desktop

重新安装chrome和virtualbox

cd /etc/apt/sources.list.d
sudo mv google-chrome.list.save google-chrome.list
apt update
apt install google-chrome-stable

本地流线型开发

本地流线型开发

集成开发,测试部署

IDE

K8S POD Command Override OCR docker Entrypoint vs k8s command docker k8s entry ENTRYPOINT command arguments CMD args k8s command and args override the default OCR Entrypoint and Cmd Dockerfile FROM alpine:3.8 RUN apk add --no-cache curl ethtool && rm -rf /var/cache/apk/* CMD ["--version"] ENTRYPOINT ["curl"] cmd-override-pod.yaml apiVersion: v1 kind: Pod metadata: name: command-override labels: purpose: override-command spec: containers: - name: command-override-container image: bigo/curl:v1 command: ["curl"] args: ["--help"] restartPolicy: Never docker run -it bigo/curl:v1 curl 7.

Node-level Logging System component logs RUN IN CONTAINER(Y/N) Systemd(W/WO) LOGGER LOCATION kubelet and container runtime W/O /var/log kubelet and container runtime W journald scheduler Y /var/log kube-proxy Y /var/log /var/lib/kubelet/pods/<PodUID>/ /var/log/pods/<PodUID>/<container_name> ls -l /var/log/pods/<PodUID>/<container_name>/ lrwxrwxrwx 1 root root 165 3月 30 06:52 0.log -> /var/lib/docker/containers/e74eafc4b3f0cfe2e4e0462c93101244414eb3048732f409c29cc54527b4a021/e74eafc4b3f0cfe2e4e0462c93101244414eb3048732f409c29cc54527b4a021-json.log Cluster-level logging Use a node-level logging agent that runs on every node.

建筑工程施工图 具有图纸齐全、表达准确、要求具体的特点。它是设计工作的最后成果,是进行工程施工、编制施工图预算和施工组织设计的依据,也是进行施工技术管理的重要技术文件。一套完整的建筑工程施工图,一般包括建筑施工图、结构施工图、给排水、采暖通风施工图及电气施工图等专业图纸,也可将给排水、采暖通风和电气施工图合在一起统称设备施工图。 建筑施工图 简称“建施”。它一般由设计部门的建筑专业人员进行设计绘图。建筑施工图主要反映一个工程的总体布局,表明建筑物的外部形状、内部布置情况以及建筑构造、装修、材料、施工要求等,用来作为施工定位放线、内外装饰做法的依据,同时也是结构施工图和设备施工图的依据。建筑施工图包括设备说明和建筑总平面图、建筑平面图、立体图、剖面图等基本图纸以及墙身剖面图、楼梯、门窗、台阶、散水、浴厕等详图和材料做法说明等等。 结构施工图 结构施工图指的是关于承重构件的布置,使用的材料,形状,大小,及内部构造的工程图样,是承重构件以及其他受力构件施工的依据。 结构施工图包含以下内容: 结构总说明、基础布置图、承台配筋图、地梁布置图、各层柱布置图、各层柱配筋图、各层梁配筋图、屋面梁配筋图、楼梯屋面梁配筋图、各层板配筋图、屋面板配筋图、楼梯大样、节点大样 BIM BIM software is used by individuals, businesses and government agencies who plan, design, construct, operate and maintain buildings and diverse physical infrastructures, such as water, refuse, electricity, gas, communication utilities, roads, railways, bridges, ports and tunnels.S BIM设计, BIM施工 CAD建模范式对比 - 直接建模 vs. 参数化建模 参数化设计涉及工程师逐个构建 3D 几何图形。 2D 草图变成 3D 特征, 并适当地应用约束和关系以符合设计师的意图。 导出和导入模型会删除其特征历史并将其转换为所谓的“哑几何体”。 参数化建模的另一个弱点是,随着特征数量的增加,更新模型所需的计算量也会增加。“如果历史树中有一个具有 1000 个特征的零件,当你编辑该树中的最后一个功能时,它会非常快速地进行,”Siemens PLM 主流工程副总裁 Dan Staples 解释道。 “但是当你编辑该树中的第一个特征时,可能需要很长时间,因为它必须在到达第 1,001 个特征之前计算其间的所有 1,000 个特征。

git clone [email protected]:wubigo/kubernetes.git
git remote add upstream https://github.com/kubernetes/kubernetes.git
git fetch --all
git checkout tags/v1.13.3 -b v1.13.3 
git branch -av|grep 1.13
* fix-1.13                            4807084f79 Add/Update CHANGELOG-1.13.md for v1.13.2.
  remotes/origin/release-1.13         4807084f79 Add/Update CHANGELOG-1.13.md for v1.13.2.

管理POD

func (kl *Kubelet) syncPod(o syncPodOptions) error {

基于腾讯云Go SDK开发

下载开发工具集

go get -u github.com/tencentcloud/tencentcloud-sdk-go

为集群准备CVM

从本地开发集群K8S读取安全凭证secretId和secretKey配置信息, 然后把安全凭证传送给SDK客户端

secretId, secretKey:= K8SClient.Secrets("namespace=tencent").Get("cloud-pass")
credential := CloudCommon.NewCredential("secretId", "secretKey")
client, _ := cvm.NewClient(credential, regions.Beijing)
request := cvm.NewAllocateHostsRequest()
request.FromJsonString(K8SClient.Configs("namespace=tencent").Get("K8S-TENCENT-PROD"))
response, err := client.AllocateHosts(request)

通过ANSIBLE在CVM搭建K8S集群

Ansible.Hosts().Get(response.ToJsonString())

调用ANSIBLE开始在CVM部署K8S集群

转录语音数据集

mozilla crowdsources the largest dataset of human voices available for use, including 18 different languages, adding up to almost 1,400 hours of recorded voice data from more than 42,000 contributors

https://blog.mozilla.org/blog/2019/02/28/sharing-our-common-voices-mozilla-releases-the-largest-to-date-public-domain-transcribed-voice-dataset/

简介

CNI是K8S的网络插件实现规范,与docker的CNM并不兼容,在K8S和docker的博弈过程中, K8S把docker作为默认的runtime并没有换来docker对K8S的支持。K8S决定支持CNI规范。 许多网络厂商的产品都提供同时都支持CNM和CNI的产品。

在容器网络环境,经常看到docker看不到K8S POD的IP网络配置, DOCKER容器有时候和POD无法通信。

CNI相对CNM是一个轻量级的规范。网络配置是基于JSON格式, 网络插件支持创建和删除指令。POD启动的时候发送创建指令。

POD运行时首先为分配一个网络命名空间,并把该网络命名空间制定给容器ID, 然后把CNI配置文件传送给CNI网络驱动。网络驱动连接容器到自己的网络, 并把分配的IP地址通过JSON文件报告给POD运行时POD终止的时候发送删除指令。

当前CNI指令负责处理IPAM, L2和L3, POD运行时处理端口映射(L4)

K8S网络基础

K8S网络基础

CNI插件

CNI实现方式

CNI有很多实现,在这里之列举熟悉的几个实现。并提供详细的说明文档。

  • Flannel

  • Kube-router

    Kube-router

  • OpenVSwitch

  • Calico

    Calico可以以非封装或非覆盖方式部署以支持高性能,高扩展扩展性数据中心网络需求

    CNI-Calico

  • Weave Net

  • 网桥

    CNI 网桥

Decide to gave hugo a shot after many years of being jekyll

大多数重要的应用程序都是在文件系统的基础上构建,而不是在原始磁盘上 构建。例如LEVELDB.

文件系统在系统崩溃恢复所表现的行为,我们称之为持久化属性,大概分为 两类:原子操作和顺序操作

[1] All File Systems Are Not Created Equal

在4年前加入GLODON的时候,当时我们正在从传统的CS,单体的中心数据库,私有数据中心 向分布式,混合云架构演进。我们现在构建,部署,运营分布式关系/图像/键值数据库, 分布式检索,基于HDFS和对象存储的大数据分析平台。

在这个过程中,打心里认为学到的最重要的一个简单概念:日志。有时候我们叫它预写日志, 提交日志或事务日志。日志伴随着计算机出现就一直存在,是分布式数据系统和实时应用 架构的核心。

你不会完全理解数据库,NoSQL,键值存储,复制,paxos共识,hadoop,版本控制等任务 软件系统,除非完全理解日志。然而大部分程序员其实对日志并不熟悉。本贴将带你一步步 了解日志,包括什么是日志,如何有效的使用日志,通过日志来构建数据集成,实时数据处理 等业务系统。

第一个部分:什么是日志

日志可能是最简单的存储抽象。它是一个只可追加的,完全按照时间顺序记录的数据序列。 新的记录追加到日志存储的末尾。读取的时候从左向右处理。每一条记录条目分配了一个 唯一的日志序列号。

日志的存储次序定义了时间的概念,因为左边的日志条目始终比右边的日志存储的时间更早。 日志条目唯一序列号可以看做日志条目时间戳。把这个顺序定义为时间咋一看觉得奇怪,但 这个属性很方便的和特定的物理时钟隔离开来。这个属性很快证明是分布式系统所必须的。

日志条目的内容和格式不是本贴讨论内容要重点关心的。而且我们也不能无限的追加记录, 因为存储空间的限制。我们晚点开会谈到这一点。

因此,日志和文件,数据表没有根本不同。文件是字节数组,数据表是记录数组,日志只是 一个特定的类型的文件或数据表:日志数组按时间排序。

到此,你可能奇怪,我们有啥必要讨论如此简单的东西?只可追加的日志序列到底和数据系统 在哪些方面有关联呢?答案是日志有一个特殊的目的:记录什么时间发生了什么事。对分布式 系统来说,在很多方面,这都是核心问题。

但在我们继续讨论之前,让我先澄清一个让人困惑的事情。每一个程序员应该对另一种日志定义 非常熟悉并经常使用:非结构化的错误日志或跟踪日志,这些日志由应用程序利用syslog或 log4j写到本地文件系统。这类日志我们叫做应用日志。应用日志是我要描述的日志的退化形式。 他俩最大的区别是应用日志主要是用来运维开发人员读取使用,而我描述的数据日志主用来被 程序访问。

数据库日志

我不知道数据库日志的真正起源,可能就像二分查找一样,因为太过于简单,发明者都没有意识 到这是一个发明。它最早在IBM的System R中使用,用作各种数据结构和索引在崩溃的后同步。 为了保证数据的原子性和持久性,数据库把要修改的记录在提交前先写入日志。日志记录发生了什么 ,是每个数据表或索引表的历史投影。因为日志被立即写入存储盘,被作为系统崩溃发生后进行 系统恢复有效的数据来源。

慢慢的,日志的使用范围从ACID的实现细节扩展到数据库间的数据复制机制。实践证明,这些 本地数据库数据的变更记录正是要保持远程的数据库副本同步所必需的。Oracle, MySQL和 PostgreSQL都有日志传送协议,在从库上做数据库复制。

分布式系统日志

日志解决的两个问题:变更顺序和数据分发,在分布式数据系统中更加重要。对数据变更顺序的 达成一致是这些系统设计的核心问题。

以日志为中心作为分布式系统的解决思路,源于一个简单的观察结果,我称之为状态机复制规则:

如果两个相同的,”确定性”的程序从相同的状态启动,以相同的顺便获取 相同的输入,他俩会产生相同的输出并以相同的状态结束

“确定性”是指程序处理不依赖于时间,不会因为任何其他的带外的输入影响其处理结果。那些 输出结果依赖线程的执行顺序,或者API调用*gettimeofday*,或其他不可重复的调用的程序 都是非”确定性”。

机器里面的数据是程序的状态的表示,任务处理完后,无论是数据留在才内存,还是在磁盘。

以相同的顺序产生的相同输入这一点提醒我们:这就是日志上场了。这是一个直觉概念: “确定性”的程序会从相同的日志产生相同的结果。

分布式应用看来一个相当直观思路就是:实现一个分布式一致性的日志,作为输入分发到多个 机器上处理相同的任务的程序。日志的目的就是排除输入流产生的所有非确定性输出,保证 每个处理输入流的程序副本保持在相同的状态。

如果你理解了这一点,关于这个规则就没有多深奥或多复杂啦,它或多或少的等于说:确实性的 处理过程是确定性的。然而,我认为它只是分布式系统设计更通用的设计工具之一。

以日志为中心的分布式设计的一个亮点,以时间戳为索引的日志成为程序副本的状态的时钟。 你可以用一个数字来描述一个程序副本:该副本处理的最近日志条目的时间戳。时间戳和日志 一起唯一的快照了副本的完整状态。

不同应用组的人描述日志的使用可能有所不同,数据库组的人经常区分物理日志和逻辑日志, 物理日志记录每行改变的内容,逻辑日志记录导致改变的SQL命令(CRUD)。

分布式系统文献经常把处理和复制划分为两大类别:状态机模式和主备模式。状态机模式 经常指双活,对输入请求做日志记录,每一个副本处理每一个请求。主备模式和状态机模式 有稍微的差别,主备模式为推举一个主节点,主节点会按顺便处理请求,并把处理结果的 状态作为日志同步到从节点。

变更日志101:

参考

[1] What every software engineer should know about real-time data’s unifying abstraction

https://git-lfs.github.com/