Posts

Showing posts from May, 2022

干翻 nio ,王炸 io_uring 来了 ,史上最详细说明及最全图解!!

Image
大趋势:全链路异步化,性能提升10倍+ 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多。 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构总体上是 全链路同步模式 。 全链路同步模式 不仅造成了资源的极大浪费,并且在流量发生激增波动的时候,受制于系统资源而无法快速的扩容。 全球后疫情时代,降本增效是大背景。如何降本增效?一条好的路径: 全链路同步模式  ,升级为  全链路异步模式 。 全链路异步模式 改造 具体的内容,请参考尼恩的深度文章: 全链路异步,让你的 SpringCloud 性能优化10倍+ 先回顾一下全链路同步模式架构图 全链路同步模式  ,如何升级为  全链路异步模式 , 就是一个一个 环节的异步化。 40岁老架构师尼恩,持续深化自己的3高架构知识宇宙,当然首先要去完成一次牛逼的 全链路异步模式 微服务实操,下面是尼恩的实操过程、效果、压测数据(性能足足提升10倍多)。 全链路异步模式 改造 具体的内容,请参考尼恩的深度文章: 全链路异步,让你的 SpringCloud 性能优化10倍+ 并且,上面的文章,作为尼恩 全链路异步的架构知识,收录在《 尼恩Java面试宝典 》V52版的架构专题中 注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从这里获取: 语雀 或者 码云 全链路异步化的最终目标 全链路异步化的最终目标,如下图所示: 应用层:编程模型的异步化 框架层:IO线程的异步化 OS层:IO模型的异步化 一:应用层:编程模型的异步化 这个请大家去看 尼恩的 《 响应式 圣经 PDF 》电子书 随着 云原生时代的到来, 底层的 组件编程 越来越 响应式、流化, 从命令式 编程转换到 响应式 编程,在非常多的场景 ,是大势所趋。 而响应式编程, 学习曲线很大, 大家需要多看,多实操。 二:框架层:IO线程的异步化 这个大家 都选择 具有异步 回调功能的 异步线程模型,如 Reactor 线程模型 这个是面试的绝对重点 IO的王者组件,Netty框架,整体就是一个 Reactor 线程模型 实现 也是非常核心的知识,这里不做展开,请大家去看尼恩的畅销书《Java 高并发核心编程卷 1 加强版》。 三:OS层:IO模型的异步化 目前的一个最大难题,...

为 Openstack 创建 PXE 启动映像

  Openstack 不支持启动无盘 PXE 启动 VM,我们必须创建具有 PXE 启动功能的映像才能实现此目的。 1.创建一个小的空磁盘文件,创建dos文件系统。 dd if=/dev/zero of=pxeboot.img bs=1M count=4 mkdosfs pxeboot.img 2.让它可以通过syslinux引导 losetup /dev/loop0 pxeboot.img mount /dev/loop0 /mnt syslinux --install /dev/loop0 3.安装iPXE内核并制作系统.cfg在启动时加载它 wget http://boot.ipxe.org/ipxe.iso mount -o loop ipxe.iso /media cp /media/ipxe.krn /mnt cat > /mnt/syslinux.cfg <<EOF DEFAULT ipxe LABEL ipxe KERNEL ipxe.krn EOF umount /media/ umount /mnt 4.现在我们已经准备好了pxeboot.img,让我们注册它来一瞥 source nceprc glance image-create --name NG-AS --is-public true --disk-format raw --container-format bare < pxeboot.img

linux下内网IPv4如何NAT到ipv6,并连通IPv6的实现

Image
 网络拓扑图如下: ·        eth0为网关WAN口,接入广域网。 ·        eth1为网关LAN口,接入局域网。 主要配置: 1. linux服务器接口的ipv6地址配置 # sysctl net.ipv6.conf.all.forwarding=1     //打开ipv6转发功能; #ip addr add 2001:250:1006:5066::100/64 dev eth1  //配置lan口ipv6地址,即内网的网关,前64位与wan口的相同;  #ip addr add 2001:250:1006:5066:216:d3ff:fe25:93ff/64 dev eth0     // 配置wan口ipv6地址,即从广域网获得的IPv6地址; # ip -6 route add ::/0 via 2001:250:1006:5066::1 dev eth0 metric 256  //添加默认路由,即广域网所给的网关; 2.配置radvd为局域网自动配置网络信息 安装radvd  #yum install radvd  配置/etc/radvd.conf        interface eth1 {         AdvSendAdvert on;         MinRtrAdvInterval 30;         MaxRtrAdvInterval 100;         prefix 2001:250:1006:5066::/64         {                 AdvOnLink on;               ...

NAT-PT - 原理

Image
操作 NAT-PT的工作原理是捕获,转换和发送从IPv6到IPv4网络的数据包(反之亦然)。输出数据包的目标 IPv4 地址由接收的 IPv6 数据包中目标的最后四个字节确定。请看下图。PC1 上的一个用户,一个内部纯 IPv6 主机打开一个 Internet 浏览器,然后转到 www.google.com。他的计算机首先对其 DNS 服务器执行查询。 NAT-PT 捕获数据包,并在 PC1 的 IPv6 地址与其池中的某个 IPv4 地址之间创建新的绑定,并转换数据包。NAT-PT 看到 DNS 查询并将 AAAA 请求转换为 A 请求。最后,它为新创建的 IPv4 数据包找到路由,并将其排队到相应的出站接口。 DNS 服务器接收查询并发送答复。 NAT-PT 捕获流量并查找映射的 IPv6 地址。它还会查看 DNS A 资源记录并将其转换为 AAAA 记录。它通过添加一个特殊的“NAT-PT前缀”(通过“naptd-confmaker”配置,默认值为2000:ffff::)到 IPv4 地址的开头。最后,它为新创建的 IPv6 数据包找到路由,并将其排队到相应的出站接口。 从这里,PC1 启动与 www.google.com 的连接。 NAT-PT捕获数据包并在PC1的IPv6地址与其池中的IPv4地址之一之间创建新的绑定,转换数据包,查找路由,然后...等。 Google的Web服务器回复初始SYN数据包。 NAT-PT 捕获流量并查找映射的 IPv6 地址。最后,它为新创建的 IPv6 数据包找到路由,并将其排队到相应的出站接口。 以上总结了纯 IPv6 和纯 IPv4 主机如何通信的基础知识。连接的其余部分以相同的方式发生。NAT-PT 维护三个“转换”池,一个用于 TCP,一个用于 UDP,一个用于 ICMP。默认情况下,TCP 转换在捕获 RST 或 FIN 数据包后 5 分钟后或 24 小时不活动后超时。UDP 转换在 1 小时后过期,ICMP 在 30 秒后过期。 先决条件 NAT-PT 要求 iptable 和 ip6tables 都能正常工作。这是由于NAT-PT在用户空间中运行的事实引起的。这有两个重要的副作用: 1. TCP 重置。 在数据包从 IPv6 转换并使用出站接口的 IPv4 地址作为转换的全局 IPv4 地址发送到 IPv4 端...

用于 Openstack Glance/Cinder/Instance-store 的 NFS 后端

在这篇文章中,让我们介绍如何将NFS配置为Openstack Glance,Cinder和共享实例存储的统一存储后端,我们还将看看它是如何工作的。 设置:1 个控制器和 2 个计算节点。控制器也充当 NFS 服务器。 OS+Openstack: RHEL7 + Juno 控制器: 192.168.255.1 HPDL36 计算: 192.168.255.2 HPDL37 计算: 192.168.255.3 HPDL38 在控制器服务器上设置 NFS 服务器 创建 3 个文件夹作为实例存储、概览和灰烬的共享源,授予足够的访问权限: mkdir /nfsshare; chmod 777 /nfsshare mkdir /nfsshare_glance; chmod 777 /nfsshare_glance mkdir /nfsshare_cinder; chmod 777 /nfsshare_cinder 创建 /etc/导出 /nfsshare   *(rw,no_root_squash) /nfsshare_cinder *(rw,no_root_squash) /nfsshare_glance *(rw,no_root_squash) 启动 NFS 服务器 systemctl start rpcbind systemctl start nfs systemctl start nfslock 设置 NFS 客户端 一目了然 将 NFS 共享挂载到控制器节点上,一目了然: mount HPDL36:/nfsshare_glance /var/lib/glance/images 新星实例存储 在 2 个计算节点上挂载 NFS 共享,用于共享实例存储 mount HPDL36:/nfsshare /var/lib/nova/instances 煤渣 煤渣卷服务将处理安装,我们不需要在这里进行手动安装。 设置开放堆栈 由于 Glance 和 Nova 将这些 NFS 挂载的文件夹用作本地文件系统,因此默认的 Openstack 配置将起作用。只有 Cinder 需要 NFS 后端的特殊配置: 将 NFS 共享条目创建到文件中 /etc/cinder/nfsshare HPDL36:/nfsshare_cinder 更改文件的所有权和访问权限:...

ML2/VXLAN 的工作原理

Image
我的设置: 1 个控制器节点 + 2 个计算节点 RDO Havana 2013.2.2, CentOS 6.5, OpenVSwitch 1.11.0 VXLAN 本地 IP: 控制器:10.142.255.101 计算-1:10.142.255.102 计算-2:10.142.255.103 1. 使用 ML2 设置 VXLAN 打包安装后,默认情况下不安装ML2,我们必须手动配置它。 在控制器节点上: yum install  openstack-neutron-ml2 python-pyudev 编辑 /etc/neutron/neutron.conf core_plugin =neutron.plugins.ml2.plugin.Ml2Plugin service_plugins=neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.loadbalancer.plugin.LoadBalancerPlugin 更改链接 plugin.ini unlink /etc/neutron/plugin.ini ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 编辑 /etc/neutron/plugin.ini [ml2] type_drivers = vxlan tenant_network_types = vxlan mechanism_drivers = openvswitch [ml2_type_flat] [ml2_type_vlan] [ml2_type_gre] [ml2_type_vxlan] vni_ranges = 1001:2000 vxlan_group = 239.1.1.1 [database] sql_connection = mysql://neutron:83105f1d6ded47cc@10.142.0.101/neutron_ml2 [securitygroup] firewall_driver = dummy_value_to_enable_security_groups...