什么是生成式ai

什么是AI 人工智能(AI)是指计算机系统能够执行人类通常需要使用智力才能完成的任务的能力。这些任务可以包括语音识别、图像识别、自然语言处理、决策制定等等。人工智能的目标是让计算机拥有类似人类的智能水平,能够像人一样学习、推理、理解和适应环境。 什么是ML 机器学习(ML)是一种人工智能的分支,其主要关注如何让计算机根据数据自动学习并改进算法,而不需要人工干预。换句话说,机器学习是一种数据驱动的方法,通过分析和学习数据中的模式和规律,让计算机能够自主地进行预测和决策。机器学习算法通常可以分为监督学习、无监督学习、半监督学习和强化学习等几种类型。 什么是DL 深度学习(DL)是机器学习的一种特殊形式,其主要依赖于深层神经网络(DNN)来实现数据的学习和处理。深度学习的主要特点是可以从大量的未标记数据中进行学习,并生成高度抽象的特征表示。深度学习已经被广泛应用于图像和语音识别、自然语言处理、推荐系统等领域,并在这些领域中取得了惊人的成果。 AI,ML和DL的应用领域 人工智能、机器学习和深度学习已经在各个领域得到了广泛的应用,这里列举几个典型的应用领域。 自然语言处理(NLP):自然语言处理是人工智能领域的一个重要应用方向,其主要目标是让计算机能够理解、分析和生成自然语言。在这个领域中,机器学习和深度学习算法被广泛应用于文本分类、情感分析、机器翻译、问答系统等任务。 计算机视觉(CV):计算机视觉是指让计算机能够理解和分析图像和视频,并从中提取有用的信息。在这个领域中,深度学习算法已经成为了主流,广泛应用于图像分类、目标检测、物体跟踪、人脸识别等任务。 语音识别(ASR):语音识别是指让计算机能够理解和转换人类语音的能力。在这个领域中,深度学习算法已经成为了主流,广泛应用于语音识别、语音合成等任务。 推荐系统:推荐系统是指根据用户的历史行为、兴趣和偏好,向用户推荐个性化的商品、服务或信息的系统。在这个领域中,机器学习和深度学习算法被广泛应用于用户行为分析、特征提取、推荐模型建立等任务。 自动驾驶:自动驾驶技术是指让汽车、飞机、无人机等交通工具能够自主地行驶和操作的技术。在这个领域中,深度学习算法被广泛应用于图像处理、目标检测、障碍物识别等任务。 AI、ML和DL的技术原理 人工智能、机器学习和深度学习的实现都依赖于一些基础技术和算法,下面介绍其中一些常见的技术原理。 神经网络:神经网络是指一种模拟人类神经系统的计算模型,其基本单元是神经元。深度学习中的神经网络通常包括输入层、隐藏层和输出层,其中隐藏层可以有多层。不同的神经网络结构和算法可以应用于不同的任务。 卷积神经网络(CNN):卷积神经网络是一种特殊的神经网络结构,其主要针对图像和视频等二维数据的处理。卷积神经网络中的卷积层和池化层可以有效提取图像中的特征,并通过全连接层进行分类和识别。 循环神经网络(RNN):循环神经网络是一种特殊的神经网络结构,其主要针对序列数据的处理。循环神经网络可以通过循环连接来处理序列数据中的时序信息,广泛应用于语音识别、机器翻译等任务。 深度学习框架 深度学习框架是指一些基于编程语言的工具箱,可以方便地构建和训练深度学习模型。常见的深度学习框架包括TensorFlow、PyTorch、Keras等。 AI、ML和DL的区别 尽管人工智能、机器学习和深度学习的概念和应用有所重叠,但它们之间还是存在一些明显的区别。 技术原理不同:人工智能是一个比较宽泛的概念,包括了许多技术和算法;机器学习是一种数据驱动的方法,主要关注如何让计算机自动学习和改进算法;深度学习是机器学习的一种特殊形式,依赖于深层神经网络来实现数据的学习和处理。 应用场景不同:人工智能、机器学习和深度学习都有广泛的应用场景,但其应用范围和任务却有所不同。人工智能的应用范围相对广泛,可以应用于语音识别、图像识别、自然语言处理等多个领域;机器学习主要应用于数据挖掘、预测分析、模式识别等领域;深度学习则主要应用于计算机视觉、自然语言处理、推荐系统等领域。 什么是生成式AI 生成式人工智能(Generative Artificial Intelligence,简称生成式 AI)是一种基于机器学习和人工智能技术的范畴,其目标是让计算机系统能够自主地生成各种类型的数据,如文本、图像、音频等,而不仅仅是对已有数据的模仿或分类。生成式 AI 的核心能力在于创造新的内容,而不仅仅是对已知模式的重复应用。其中,生成式人工智能模型是生成式 AI 的重要组成部分,而 chatGPT 就是其中的一种代表性模型。 生成式 AI 的原理基于深度学习,特别是神经网络技术,它可以通过分析大量的训练数据来学习数据的分布和模式,然后利用这些学习到的模式来生成新的数据。生成式 AI 不仅可以生成高质量的文本,还可以用于图像生成、音乐创作、视频生成等各种领域。 生成式 AI 模型的核心思想是使用生成对抗网络(GANs)、变分自编码器(VAEs)等架构,通过多层次的神经网络模块来模拟数据的分布。这些模型可以被训练成生成与训练数据相似但又独特的新数据,从而实现创造性的内容生成。生成式 AI 在自然语言处理领域中的代表模型是循环神经网络(RNNs)、长短时记忆网络(LSTMs)、转换器模型(如 GPT)等。 生成式ai应用 生成式 AI 的应用广泛,包括但不限于以下领域: 自动写作与内容生成: 生成式 AI 可以自动生成文章、新闻、故事等文本内容,帮助内容创作者提高效率。 艺术创作与设计: 在绘画、音乐、设计领域,生成式 AI 可以创造出独特的艺术品和创意作品。 虚拟现实与游戏开发: 生成式 AI 可以生成逼真的虚拟世界、地图、角色等,用于游戏设计和虚拟现实体验。 科学研究与创新: 在药物研发、分子设计、科学模拟等领域,生成式 AI 可以加速创新和发现。 语音合成与音乐创作: 生成式 AI 可以创作音乐、合成语音,并模仿各种声音风格。……

阅读全文

什么是service mesh

什么是service mesh Service Mesh又译作“服务网格”,作为服务间通信的基础设施层。Willian Morgan(Linkerd的CEO)如下定义Service Mesh。 Service Mesh 是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh 保证请求可以在这些拓扑中可靠地穿梭。在实际应用当中,Service Mesh 通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。 Service Mesh 实际上就是处于 TCP/IP 之上的一个抽象层,它假设底层的 L3/L4 网络能够点对点地传输字节(当然,它也假设网络环境是不可靠的,所以 Service Mesh 必须具备处理网络故障的能力)。 架构图 通过以上的架构图,很清晰的看到,最重要的两个部分就是control plane 和sidecar Control Plane:控制平面是服务网格的集中管理和配置层。它负责控制和协调sidecar代理的行为。它提供了一个控制平面API,允许管理员配置流量管理、安全性和可观测性的策略、规则和设置。 Sidecar(旁车):它基于Envoy代理。它是在同一Kubernetes POD中运行的另一个容器,负责处理所有的横切关注点。它基于旁车容器设计模式。•应用程序流量:微服务通过使用sidecar容器连接到其他微服务。应用程序流量基本上是Envoy sidecar代理容器之间的通信 Data Plane:数据平面指的是部署在每个服务实例旁边的一组sidecar代理组成的网络,用于与系统中的其他服务进行通信。它充当服务与网络的中间人。Sidecar代理处理入站和出站流量,拦截通信并提供其他功能。 Controllers:控制器是负责管理和控制网格行为的组件。它通常是一个软件组件,用于监视服务的状态和健康情况、配置流量路由和负载均衡规则、实施安全策略,并处理网格内服务之间通信的其他方面。 服务发现(Service Discovery):服务发现是服务网格架构中的一个重要组件。它使得服务能够动态地定位和连接到彼此,而无需硬编码的地址。 证书授权机构(Certificate Authority):它提供和管理根证书和中间证书,并执行证书签名操作。 应用程序微服务(Application Microservices):这些是组成应用程序的各个服务或微服务。它们负责处理特定的功能或任务。 API端点(API Endpoints):API端点是网格中的服务之间进行通信的入口点 方案 目前社区Service Mesh的开源解决方案有:Buoyant 公司推出的 Linkerd 和 Google、IBM 等厂商牵头的 Istio。Linkerd 更加成熟稳定些,Istio 功能更加丰富、设计上更为强大,社区相对也更加强大一些。 istio介绍 Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。Istio为希腊语,意思是”起航“。Istio是一个开源的服务网格平台,提供了一组工具和功能,用于管理和保护基于微服务的应用程序。它旨在解决复杂分布式系统中与服务之间通信、可观察性、安全性和流量管理相关的常见挑战。在其核心,Istio在应用程序中的每个微服务旁边部署一个称为Envoy的sidecar代理。这个sidecar代理拦截和管理服务的所有入站和出站流量,使得Istio可以控制和监控服务之间的通信。 优点: Istio拥有庞大的在线服务网格社区,并且在互联网上备受赞誉和讨论。其GitHub的贡献者远远超过Linkerd,数量上占据优势。•此外,它支持Kubernetes和VM模式。 缺点: Istio并非免费提供,使用它需要相当大的时间投入,包括阅读文档、设置、确保正常功能和持续维护。 在生产环境中实施和集成Istio可能需要几周甚至几个月的时间,这取决于基础架构的复杂性。 使用Istio需要相当大的资源开销。•与Linkerd不同,它缺乏内置的管理仪表板。 此外,Istio要求使用其自己的入口网关。 Istio控制平面仅在Kubernetes容器中受支持,没有可用于Istio数据平面的VM模式。……

阅读全文

企业为什么选择使用openshift

什么是openshift OpenShift是红帽的云开发平台即服务(PaaS)。自由和开放源码的云计算平台使开发人员能够创建、测试和运行他们的应用程序,并且可以把它们部署到云中。OpenShift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。 OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat Enterprise Linux提供集成应用程序,运行库和一个配置可伸缩的多用户单实例的操作系统,以满足企业级应用的各种需求。 架构图 核心的概念 https://zhuanlan.zhihu.com/p/635160126?utm_id=0 容器(Container) 镜像(Image) 用户(User) 项目(Project) 容器沙箱(Pod) 部署(Deployment) 服务(Service) 路由(Router) 持久化存储(Persistent Storage) 模板(Template) 构建(Build)和镜像流(ImageStream) 为什么要使用openshift OpenShift的持续集成和持续部署(CI/CD)功能可以帮助开发者快速地将代码更改合并到主分支,并通过自动化的方式将其部署到生产环境,这不仅可以提高开发效率,还可以减少人为错误,提高软件的质量。 OpenShift的多租户支持功能使得不同的团队或者公司可以在同一个平台上共享资源,而不需要担心数据安全问题,每个租户都可以拥有自己的独立的应用程序、服务和数据库,这样就可以满足不同团队的需求。 OpenShift的应用市场功能提供了一个方便的平台,让开发者可以找到并使用各种预先构建的应用程序和服务,而不需要自己从头开始编写,这样不仅可以节省时间,还可以提高开发效率。 OpenShift的自动扩展功能可以根据应用程序的负载情况自动调整资源的分配,以确保应用程序的性能和可用性,这样可以避免因为资源不足而导致的应用程序崩溃,也可以在需求增加时快速地扩展应用程序的能力。 OpenShift的优势在于其简单易用、功能强大和灵活可扩展的特性,它可以帮助开发者快速地部署和管理应用程序,提高开发效率,降低运维成本。……

阅读全文

Oauth2.0

what is oauth2.0 OAuth 2.0, which stands for “Open Authorization”, is a standard designed to allow a website or application to access resources hosted by other web apps on behalf of a user. It replaced OAuth 1.0 in 2012 and is now the d industry standard for online authorization. OAuth 2.0 provides consented access and restricts actions of what the client app can perform on resources on behalf of the user, without ever sharing the user’s credentials.……

阅读全文

Devops traning

Devops DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality.DevOps is complementary with Agile software development; CI/CD is a best practice for devops and agile development. CI/CD bridges the gaps between development and operation activities and teams by enforcing automation in building, testing and deployment of applications.……

阅读全文

architect design principle

Architect design principle Techinical part Scaling workload Building resilient architecture Design for performance Loose coupling Data-driven design Security everywhere Automating everything Function part Design for compliance Design for operation Design for System monitoring Methodology part Design for agile dev Design for agile devops ……

阅读全文

enterprise atchitect/solution architect/technical architect difference

Architect Different architect Enterprise Architect play a key role when it comes to identifying business needs in context with external factors like competitors and internal factors like a company’s IT landscape. Solution Architect focused on details and solution technologies to address a specific business problem, it provides a channel between enterprise architecture and technical architecture Techinical Architect focused more on designing and implementing technical solutions. ……

阅读全文

linux 临时文件的管理

Centos临时目录的系统管理 Linux产生大量的临时文件和目录,例如/tmp、/run 。RHEL7或者CentOS7中,systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。旧版本系统使用watchtmp+cron来共同实现管理临时文件。 systemd启动后,其中一个启动的服务单元是systemd-tmpfiles-setup,该服务的命令为:systemd-tmpfiles –creat/–clean *conf , *conf是可选的,不写默认是使用所有配置文件 配置文件,优先级从上到下。 /etc/tmpfiles.d/*conf ,管理员可修改的配置文件 /run/tmpfiles.d/*conf ,daemon应用程序自己管理的配置文件,不建议更改 /usr/lib/tmpfiles.d/*conf,rpm软件安装时,自动更新的配置文件,不能更改 定期清理timer systemd定时器单元会按固定间隔调用systemd-tmpfiles --clean 。 systemctl status systemd-tmpfiles-clean.timer 查看timer状态。 systemctl cat systemd-tmpfiles-clean.timer 查看timer具体内容,也可以进入/usr/lib/systemd/system目录后使用more systemd-tmpfiles-clean.timer 来查看。 从timer具体内容可以知道系统启动15分钟后和每天会运行一次systemd-tmpfiles --clean.那么timer定时运行的是哪些服务呢? 是在systemd-tmpfiles-clean.service里面定义的: systemctl cat systemd-tmpfiles-clean.service可以查看。 ……

阅读全文

Centos 8維護已經停止了

Centos 8 維護已經停止了 年前安裝了centos8.2 yum 的repo還是用的默認的,一切都正常,昨天在新的服務器上發現yum的repo已經無法使用了,我當時就意識到應該維護停止了,馬上去網上查一下,果然如此,如果想繼續使用請替換掉原來的mirror,使用centos-vault,https://mirrors.aliyun.com/centos-vault/ 或者 https://vault.centos.org/8.2.2004/ Centos 7 的維護還是會繼續到2024年 CentOS yes Community Enterprise Operating System( Community enterprise operating system ) An acronym for , yes 100% Reconstructed RHEL( Red Hat Enterprise Linux). Even though RHEL It costs money , but CentOS It's free. , Community supported businesses Linux Distribution version . Good at Linux And don't want to pay RHEL Support fee developers and companies always choose CentOS To save money and get enterprise software .……

阅读全文

JWT

what is jwt JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt structure A well-formed JWT consists of three concatenated Base64url-encoded strings, separated by dots (.): JOSE Header: contains metadata about the type of token and the cryptographic algorithms used to secure its contents. JWS payload (set of claims): contains verifiable security statements, such as the identity of the user and the permissions they are allowed.……

阅读全文

JWT、JWE、JWS 、JWK 到底是什么

什么是 JWT 一个JWT,应该是如下形式的: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9. TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ JWT 解决什么问题? JWT的主要目的是在服务端和客户端之间以安全的方式来转移声明。主要的应用场景如下所示: 认证 Authentication; 授权 Authorization // 注意这两个单词的区别; 联合识别; 客户端会话(无状态的会话); 客户端机密。 JWT 的一些名词解释 JWS:Signed JWT签名过的jwt JWE:Encrypted JWT部分payload经过加密的jwt;目前加密payload的操作不是很普及; JWK:JWT的密钥,也就是我们常说的 scret; JWKset:JWT key set在非对称加密中,需要的是密钥对而非单独的密钥,在后文中会阐释; JWA:当前JWT所用到的密码学算法; nonsecure JWT:当头部的签名算法被设定为none的时候,该JWT是不安全的;因为签名的部分空缺,所有人都可以修改。 ### JWT的组成 一个通常你看到的jwt,由以下三部分组成,它们分别是: header:主要声明了JWT的签名算法; payload:主要承载了各种声明并传递明文数据; signture:拥有该部分的JWT被称为JWS,也就是签了名的JWS;没有该部分的JWT被称为nonsecure JWT 也就是不安全的JWT,此时header中声明的签名算法为none。 三个部分用·分割。形如 xxxxx.yyyyy.zzzzz的样式。 JWT header { “typ”: “JWT”, “alg”: “none”, “jti”: “4f1g23a12aa” } jwt header 的组成 头通常由两部分组成:令牌的类型,即JWT,以及正在使用的散列算法,例如HMAC SHA256或RSA。 当然,还有两个可选的部分,一个是jti,也就是JWT ID,代表了正在使用JWT的编号,这个编号在对应服务端应当唯一。当然,jti也可以放在payload中。 另一个是cty,也就是content type。这个比较少见,当payload为任意数据的时候,这个头无需设置,但是当内容也带有jwt的时候。也就是嵌套JWT的时候,这个值必须设定为jwt。这种情况比较少见。 jwt header 的加密算法 加密的方式如下: base64UrlEncode(header) >> eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIiwianRpIjoiNGYxZzIzYTEyYWEifQ JWT payload {……

阅读全文

Polygon在websoket的连接串数据的经常中断

本来使用工具或者服务 Pologon 美股数据供应商 Kafka Nettty Centos8.2 架构图 架构说明 Polygon是美股的数据供应商,提供美股tick级别的数据服务 美股开盘数据非常的大,平时可以达到6M/秒的传输速度,也就是说可以达到每秒6万条数据的传输速度 数据的传输是基于internet的传输,所以要保障数据在互联网上的快速传输必须基于长连接来实现,因此polygon提供了websocket服务 我们的app收到polygon websocket推送过来的数据要进行简单的解析和格式转换,然后发送到本地的kafka cluster中间件用来分发数据,给其他的应用来做大数据处理包括flink等大数据中间件 出现的问题 Polygon数据传输出现了频繁的中断1:Slow consumer slow consumer:https://polygon.io/docs/stocks/ws_getting-started 查看了一下polygon的技術文檔: if a client is consuming messages too slowly for too long, Polygon.io’s server-side buffer may get too large. If that happens, Polygon.io will terminate the WebSocket connection. You can check your account dashboard to see if a connection was terminated as a slow consumer. If this happens to you consistently, consider subscribing to fewer symbols or channels.……

阅读全文

交换机故障导致线程阻塞

本来使用工具或者服务 Jconsole Jstack prometheus 架构图 架构说明 This is an internal application (Not cloud) architect,we have big network traffic and lots of application ,we deploy in our own server we have a RabbitMQ server (which our data provider will send HKEX data to this server) we have an Application will consume the messages from MQ Our application will process the data and sending to Kafka and Elastic search……

阅读全文

阿里云架构-使用privatelink让不同的vpc的服务可以访问

本来使用工具或者服务 Alicloud vpc SLB PrivateLink endpoit zone and service ECS 架构图 架构说明 对于两个网络(VPC-A,VPC-B)的ECS提供的服务,要是A访问B,可以提供以下方案 B通过EIP或者IP或者绑定SLB,通过SLB的IP把B的服务暴露在公网上 A网络和B网络互联 通过privatelink来单向向让A网络的访问B网络的服务 分析上面优缺点 安全性不好,把服务暴露在公网 A和B网络直接互联创建路由成本太高,第二就是可能会造成网络冲突 通过privatelink私有网络连接成本低廉,单向的内网服务,不改变各自的网络配置 Privatelink 如何创建privatelink服务 privatelind endpoint service:需要关联一个SLB,此slb必须支持privatelink的SLB,slb后面就是ECS或者其他的rds等都可以 privatelink endpoint 创建的是时候需要跟endpoint service 连接 一旦创建并且链接成功,那么privatelink就可以生效了 privatelink endpoint 有一个DNS地址,我们可以通过地址直接访问,此地址是aliyun内网地址 ……

阅读全文

網絡服務器點對點的網速測試

本文简介 我們跟數據供應商之間數據傳輸一直存在很多的問題,我們的網絡經過測速后非常的快,供應商也反復說他們的網速也非常快,那麽問題來了?既然大家都快,是不是在某個路由環節之間出現了問題呢? iperf 簡介 iperf是一种命令行工具,用于通过测量服务器之間可以处理的最大网络吞吐量来诊断网络速度问题。 iperf信息 iperf版本: iperf 3.1.3 官网地址: https://iperf.fr 安裝和運行 server rpm -ivh https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm iperf3 -s client rpm -ivh https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm iperf3 -c serverip -p 5201 運行結果 [root@PC-231 ~]# iperf3 -c 172.16.10.101 -p 5201 Connecting to host 172.16.10.101, port 5201 [ 4] local 192.168.25.231 port 59398 connected to 172.16.10.101 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.……

阅读全文

aws cdk introduction

What is the AWS CDK? The AWS Cloud Development Kit (CDK) ,a framework for defining cloud infrastructure in code and provisioning it through AWS CloudFormation. CDK stack How does CDK work Build with high-level constructs that automatically provide sensible, secure defaults for your AWS resources, defining more infrastructure with less code. Use programming idioms like parameters, conditionals, loops, composition, and inheritance to model your system design from building blocks provided by AWS and others.……

阅读全文

本地数据中心和云的对比

本文简介 本来主要介绍云和本地的数据中心的对比,主要用阿里云来对比,作为aws和alicloud的认证工程师,我对云上的和自有数据中心架构系统做个详细的对比,本文,仅仅用alicloud 本系统简介 本系统主要是做美股和港股的数据处理,美股数据来源是polygon(基于websocket数据推送和restful查询api),港股的数据来源是港交所(UDP广播) 本系统功能:接收美股和港股的数据,并作本地的消息存储,用消息中间件来存储交易所数据,然用以一部分数据用来做大数据实时计算,一部数据用来做持久化的存储 本系统的架构图 本系統本地使用硬件 軟件 狀態 服務器 數量 存儲 數量 Kafka cluster centos8.2 5 ssd 4 raid5 Elatic search cluster centos8.2 3 ssd 4 raid5 Flink cluster centos8.2 3 ssd 4 raid5 Polygon subscriber single centos8.2 1 ssd 4 raid5 APP single centos8.2 1 ssd 4 raid5 本地數據中心存在的主要問題 硬件的問題 1.……

阅读全文

kafka cluster的搭建

本文使用工具或者服务 Java 8 https://archive.apache.org/dist/kafka/3.0.0/kafka_2.13-3.0.0.tgz https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz Centos8.2 Zookeeper 簡介 ZooKeeper是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务,提供的功能包括:配置维护、命名服务、分布式同步、组服务等。Kafka的运行依赖ZooKeeper。 Broker注册 Topic注册 生产者负载均衡 消费者负载均衡 消费者注册 Kafka 簡介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量 即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 zookeeper 與kafka之間的關係 ZooKeeper用于分布式系统的协调,Kafka使用ZooKeeper也是基于相同的原因。ZooKeeper主要用来协调Kafka的各个broker,不仅可以实现broker的负载均衡,而且当增加了broker或者某个broker故障了,ZooKeeper将会通知生产者和消费者,这样可以保证整个系统正常运转。 安裝zooker和kafka 之前首先要做系統的優化和配置 文件句柄數的調整 oracle Jre8 安裝 磁盤的分區和挂載點必須滿足kafka大數量的存儲xfs分區 關閉selinux 防火墻暫時關閉(後面看可以統一規劃端口) 創建非root的kafka管理用戶並添加sudoer權限 注意事項 kafka是一個分佈式的消息系統,我們會臨時存儲消息,如果存儲消息的時間長,那麽需要大空間,所以分區的時候已經要注意,就是安裝kafka的時候存儲一定要挂載到大的硬盤空間上 Zookeeper 配置 # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored.……

阅读全文

使用terraform创建阿里ecs用ansible完成主机配置

使用terraform创建ecs用ansible完成ecs的provision 本文目标就是是用terraform创建ecs包括security group,disk,vpc,vswtich,然后用ansible来初始化和配置创建好的ecs 本文只是创建了一个单机ecs,后续的文章会有load balance出现 terrorm 创建ecs 什么是terraform terraform是云工具,也就是针对云平台的 terraform是在云平台上管理资源的,就是一个云资源编排工具 terraform目标是”Write, Plan, and create Infrastructure as Code”, 基础架构即代码。具体的说就是可以用代码来管理维护 IT 资源,把之前需要手动操作的一部分任务通过程序来自动化的完成,这样的做的结果非常明显:高效、不易出错。 Terraform 核心功能 基础架构即代码(Infrastructure as Code) 执行计划(Execution Plans) 资源图(Resource Graph) 自动化变更(Change Automation) terraform安装 下载https://www.terraform.io/downloads.html 设置环境变量(省略) 创建terraform 配置文件 main.tf provider "alicloud" { access_key = "xxx" secret_key = "xxx" region = "ap-southeast-1" #version = "~> 1.5.0" } data "alicloud_instance_types" "instance_type" { instance_type_family = "ecs.……

阅读全文

使用ansible在多台客户机安装docker

Install ansible on server Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等 Ansible包括控制节点(Control node)也叫主机,受控节点(Managed nodes)也叫客户机,只在控制节点安装就好了 ansible 优点 只需要在主机上安装ansible软件,客户机不需要安装 通讯协议SSH协议和SFTP 可并行执行程序,默认情况下,forks值为5,可以按需,在配置文件中增大该值 ansible(centos)安装和配置 yum install ansible 为了使Ansible与客户端通信,需要使用用户帐户配置管理机和客户机。为了方便快捷安全,一般会配置证书方式连接客户机 ssh-keygen ssh-copy-id ansible@node ip 使用ad-hoc 在客户执行命令,相当于命令行 /etc/ansible/hosts,最好谨慎使用hosts配置,安全问题需要解决 [docker] 192.168.25.173 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="xxx" 执行以下ping,命令里面的docker对应的上面文件的docker ansible docker -m ping 使用ad-hoc命令管理软件包,安装 ansible docker -m yum -a "name=docker state=present" -b 使用ad-hoc命令管理软件包,设置默认启动 ansible docker -b -m service -a "name=docker enabled=yes" 使用ad-hoc命令管理软件包,启动 ansible docker -b -m service -a "name=httpd state=started" 使用ansible-playbook 部署docker test-ansile.……

阅读全文

给nginx安装免费的证书

https vs http https比http安全原因是传输的过程中使用了加密,因为https在服务器端使用证书 证书的认证需要认证机构,随便一个https的证书阿里巴巴云最便宜的一年要2000多,aws更是贵到天上,所以对于个人程序员来来说最好有免费的证书 cerbot就是你的选择 cerbot简介 cerbot就是Electronic Frontier Foundation (EFF)这个机构给大家发的福利,简单的一句话来说就是给你提供3个月的免费证书,证书到期后继续免费续约,个人网站是用最方便,每三个月更新一次就可以了 cerbot 使用 cerbot 安装脚本 yum -y install yum-utils yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional sudo yum install certbot python2-certbot-nginx sudo certbot --nginx(sudo certbot certonly --nginx) echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null (auto renewal) cerbot 证书验证 To confirm that your site is set up properly, visit https://yourwebsite.……

阅读全文

vagrant使用介绍

vagrant 简介 VirtualBox 是一款开源虚拟机软件,vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。 BBC Vagrant 是基于VirtualBox创建的虚拟机,并通过Vagrant进行打包而得到的VM环境。在虚拟机中部署好开发环境并建立虚拟机和实体机的文件共享,在开发时,可以通过实体机进行文件修改,并经过虚拟机中的环境执行,从而实现不同操作系统的工作环境的轻松部署。 安装 vagrant和virtualbox 下载并安装VirtualBox( https://www.virtualbox.org/wiki/Downloads )。 VirtualBox 4.3.12下载地址(windows请用此链接):http://dlc-cdn.sun.com/virtualbox/4.3.12/index.html 下载并安装Vagrant( http://www.vagrantup.com/downloads.html )。 安装和定制box 下载windows 10 box文件。 https://app.vagrantup.com/mrlesmithjr/boxes/windows10/versions/1574780096/providers/virtualbox.box 到c:\vagrant\download 执行命令 vagrant box add win10 c:\vagrant\download\virtualbox.box cd c:\vagrant vagrant init win10 vagrant up 2> vagrant.log 查看模板文件c:\vagrant\Vagrantfile $script = <<-'SCRIPT' echo "starting wechat" ipconfig > c:\ip.log C:\Users\wechat\WeChat.exe > c:\wechat.log netstat > c:\netstat.log echo "started wechat" SCRIPT Vagrant.……

阅读全文

手把手使用Hugo搭建网站-高级篇

1.3. 手把手使用hugo搭建网站高级篇 1.3.1. 創建页面的目錄 hugo提供了目錄的支持table of content 創建目錄首先你的文章必須有標題 在layouts/_default/single.html 添加代碼 {{.TableOfContents}} {{ define "main" -}} <div class="post"> <h1>{{ .Title }}</h1> <time datetime={{ .Date.Format "2006-01-02T15:04:05Z0700" }} class="post-date">{{ .Date.Format "Mon, Jan 2, 2006" }}</time> {{.TableOfContents}} {{ .Content }} </div> {{ if .Site.DisqusShortname -}} <h2>Comments</h2> {{ template "_internal/disqus.html" . }} {{- end }} {{ partial "related.html" . }} {{- end }} 1.3.2. 创建搜索 伪站内搜索 使用google cse……

阅读全文

手把手使用Hugo搭建网站-中级篇

1.2. 手把手使用hugo搭建网站进阶篇 1.2.1. 自定义菜单 配置定义菜单栏 layouts/partials/sidebar.html <aside class="sidebar"> <div class="container sidebar-sticky"> <div class="sidebar-about"> <a href="{{ .Site.BaseURL }}"><h1>{{ .Site.Title }}</h1></a> <p class="lead"> {{ with .Site.Params.description }} {{.}} {{ else }}{{end}} </p> </div> <nav> <ul class="sidebar-nav"> {{ $currentPage := . }} {{ range .Site.Menus.main -}} <li> <a class="sidebar-nav-item{{if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }} active{{end}}" href="{{ .URL }}" title="{{ .Title }}">{{ .Name }}</a> </li> {{- end }} </ul> <ul class="sidebar-nav"><br/><br/><br/><br/><br/><br/><br/></ul> </nav> <p>{{ with .……

阅读全文

手把手使用Hugo搭建网站-初级篇

1.1. 手把手使用hugo搭建网站初级篇 1.1.1. Demo使用hugo的网站 https://www.flysnow.org/ https://www.gohugo.io https://www.netlify.com/ https://gohugo.io/showcase/ https://www.smashingmagazine.com/ 1.1.2. 部分主题 https://github.com/Vimux/Mainroad https://github.com/kingfsen/Mainroad https://themes.gohugo.io/academic/ https://themes.gohugo.io/beautifulhugo/ https://themes.gohugo.io/hyde/ https://themes.gohugo.io/hugo-theme-even/ https://github.com/rujews/maupassant-hugo 1.1.3. hugo跟wordpress其他建站工具的对比 wordpress 全球31%的网站使用wordpress,尽管他有各种主题和插件,但是也有非常多的缺点,安全性,seo不够友好,定制麻烦 hugo 最快的静态生成工具,seo友好,静态更安全,方便定制模板,缺点没有插件,如果要定制模板只能懂一点go的语法 wordpress是动态的并且还需要托管数据库,所以托管费用比较昂贵 hugo是生成静态的页面,在本地生成后上传到服务器就可以了,托管费用非常便宜,可以直接用免费的github托管 hugo不可以在线编辑 wordpress vs hugo Tables 静态/动态 托管 安全性 访问速度 在线编辑 markdown wordpress 动态 复杂 需要经常升级 快 可以 不支持 hugo 静态 简单 不需要打补丁 非常快 不可以 支持……

阅读全文

SAA-CO1考试之路

考试心得 考试成绩 852 背景 工作用到aws不到1年 有多年java开发经验 linux管理员,持有RHCE 准备周期 3周從準備到考試 每天8-12小时 做过实验的知识点列表 VPN endpoint/nat gateway/internet gateway/vpn/subnet/ACL RDS/Aurora/Reshift/Aurora/DynamoDB (snaphost copy az or cross region,ebs type change ,autoscaling ,entryption ,backup/replica ,Multi A-z,read/write unit) Cloudfront (OAI,SSL certificat ,validation TTL ,pre-signed URL) S3 (static websit ,ACL ,bucket policy,lifecyle) ec2 (Cloudwath agent install,ebs mount/unmount,snapshot,elasticip binding) Cloud53 (A/alias .routing policy) Athena on S3 SQL QUERY……

阅读全文

aws sap passed

9.27 号考试通过了SAP(913分),心里终于落下一块石头.从开始准备到最后通过我用了数个星期的时间,平均每天超过10小时的准备.sap的难度比saa高不是一个级别的,涉及了大量的新的知识点.不仅仅需要知道每个知识点,还需要动手去实践,为此我写了20个几个blog都是尝试这里面的知识点,实际我做过的实验大概有40多个,几乎每天要做一个实验,因为时间的问题,没有把其他的整理到blog上来,也是一个遗憾,后面我会慢慢补充上来。 考前准备 aws 账号 :做实验用 最好有一些linux/network/dev experience 最好熟悉一门编程语言,java/.net/python/ruby/go/nodejs 最好熟悉json/yaml 如果考过saa最好了,saa是非常基础的aws认证 如果考过saa,最好保证300小时以上的学习时间 考试内容准备 印度小哥的一个考试心得基本上面面俱到了 https://www.linkedin.com/pulse/preparing-aws-certified-solutions-architect-2019-sap-c01-agarwal/ bilibili 上印度小哥sap视频 https://www.bilibili.com/video/av66737718?from=search&seid=1011549087963751322 如果听的懂建议听听 bilibili 上cloud guru的sap视频 https://www.bilibili.com/video/av39285864?from=search&seid=1657200592137432769 aws 本上的get-started https://aws.amazon.com/getting-started/ 建议尝试里面大部分的实验内容,只有实验的多了才能够理解每个服务以及服务于服务之间的关联 ……

阅读全文

aws x-ray

AWS X-Ray 可以帮助开发人员分析与调试分布式生产应用程序,例如使用微服务架构构建的应用程序。借助 X-Ray,您可以了解应用程序及其底层服务的执行方式,从而识别和排查导致性能问题和错误的根本原因。X-Ray 可在请求通过应用程序时提供请求的端到端视图,并展示应用程序底层组件的映射。您可以使用 X-Ray 分析开发和生产中的应用程序,从简单的三层应用程序到包含上千种服务的复杂微服务应用程序。 簡單來說,xray是用來追踪服務與服務之間鏈條,每個服務之間的請求內容,時間,參數等信息 用api-gateway 和 lambda 實驗 本文用到的例子是前面的博文: Aws cloudformation deploy lambda and apigateway 只需要額外做以下兩步 開啟api-gateway的x-ray,api gateway console-> apis->spring-boot-lambda->stages->Prod->logs/tracing->enable x-ray tracing 開啟lambda的x-ray,functions->spring-boot-lambda-LambdaSpringBootFunction-7CK2QHXPRA6F->aws x-ray:active tracing test x-ray:fire a request to api gateway open x-ray console:service map:you will see a picture like below: ……

阅读全文

accelerating aws migration

aws migration from OP to cloud這是aws最注重的部分,關於遷移技術,aws提供了各種各樣的工具,比如遷移數據庫(sts,dms),遷移workload(aws server migration service),協助你計劃遷移收集信息的工具(aws application discovery service),track遷移進程的工具(migration hub),遷移海量數據的aws snowball or snowmobile,s3 acceleration, 加速數據傳輸的 dierct connect等等,從網絡到數據庫到文件,給你武裝到牙齒 以下是兩篇關於數據遷移的好文 https://medium.com/@awsontop/aws-cloud-migration-strategy-and-process-6ed38479735a https://www.slideshare.net/AmazonWebServices/accelerating-your-portfolio-migration-to-aws-using-aws-migration-hub-ent321-reinvent-2017 ……

阅读全文

aws online analytical processing (or OLAP)

OLAP在線分析工具越來越來成熟,從開始的數據倉庫,到強大的elk,再到雲,比如aws的 gaq(glue-athena-quicksight),當然aws也有elk在線服務 gaq vs elk,實際上是一類的產品,glue提供了crawler去爬去數據,類似 logstash,athena提供查詢工具類似elasticsearch ,quicksight 跟 kibana一樣ui.gaq是aws雲端的服務,沒有辦法部署在線下,elk既可以部署在op也可以部署在cloud上 這篇文章來自 https://medium.com/localz-engineering/serverless-big-data-start-here-aws-glue-athena-quicksite-4c70ecac9fe3 有一個圖片 實驗 cloudwatch agent 或者 application discovery agent 到ec2 cloud watch agent 或者 discovery agent sync log 到 s3 glue裡面創建crawler ,指定s3 glue裡面創建database 和table athena 寫sql語句查詢想要的數據 如果想要類似kinana那樣可視化的工具,那麼需要付費quicksight 完 ……

阅读全文

Difference between user pool and identity pool(Federated Identities)

剛開始使用cognito服務的時候特別讓人困惑,有user pool 和 identity pool(Federated Identities),user pool裡面還有federation,federation裡面有identity provider. identity pool 裡面有autenticated provider裡面也有user pool ID! 納尼?這是什麼鬼? let’s forget the connection between them user pool 簡單來說就是提供一個用戶驗證的服務,比如用戶自定義用戶,用fb,GOOGLE,twitter等賬戶登錄,登錄後獲取一個token,用戶的每次請求帶著這個token就可以了,用戶登錄後獲取的是你個人應用的resource! ,比如你自己做了一個網站,登錄後可以管理自己用戶,權限,圖片等等,你有權限去訪問這些資源 identity pool 也是提供一個用戶認證的服務,用戶可以在裡面設置aws 的role,也就說用戶登錄後得到的aws的resource 的訪問權限,比如你可以訪問s3.只是這個登錄可以跟 user pool提供的服務去綁定,也可以不用user pool的服務直接用 identity pool裡面的provider去對接,也就說,如果你有google的id也可以登錄後獲取aws resource 資源的訪問權限,這個是登錄後aws通過sts生成臨時credential 來做到的 summary user pool 只是負責authentication,沒有authorization,即便有也是用戶本身應用的服務 identity pool,既可以authentication,又可以authoriztion,授權的是aws的resource 上幾張圖 幾個非常有價值的link https://serverless-stack.com/chapters/cognito-user-pool-vs-identity-pool.html https://gorillalogic.com/blog/java-integration-with-amazon-cognito/……

阅读全文

Aws cognito sample

这是一个aws官方的文档,我认为最好的cognito的例子,如果理解这个sample,那么cognito就没有任何问题 https://aws.amazon.com/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/ 详解 廢話少說直接上圖 程序組成部分 - 靜態的代碼存放s3 - 動態的代碼存放lambda - 代碼的訪問入口通過api-gateway - 數據的存放時dynamoDB(程序登錄後有個點擊頁面位置生成的數據,與用戶驗證沒有太多關係) Cognito user pool 在user login 流程 - 用戶用用戶名+密碼(或mfa,這取決於cognito user pool的配置)請求登錄 - aws cognito user pool去驗證用戶 - 如果用戶通過驗證返回一個token - 下一次用戶用這個token來請求訪問 - aws cognito user pool 可以基本满足用户登录,如果涉及到权限可以跟自己数据进行绑定 - 这个例子里面特别要注意的是,api gateway 直接设置了 Authorizers :里面可以指定cognito 来对用戶進行驗證,不用額外寫程序來驗證,也就說每次訪問一個服務/ride.html,api-getway通過Authorizers直接去用cognito去驗證用戶的token - 這個例子分了兩個步驟,第一個步驟是直接登錄,登錄後獲得一個toke - 第二步驟是用api-gateway 自動驗證用戶的登錄,也就是authentication ……

阅读全文

Aws cloudformation deploy lambda and apigateway

用Cloudformation 来部署 java 的lambda 和api gateway,这里要用到spring-boot写java 代码,需要用到s3,存放lambda代码,需要创建lambda function和api agetway,还需要用到sam Aws lambda with Spring Boot 本文用到的git代码来自 https://github.com/gemerick/spring-boot-lambda 本文的内容来自 https://keyholesoftware.com/2018/04/26/aws-lambda-with-spring-boot/ 本文的步骤 安装sam git 克隆现有代码 创建s3 bucket 用cloudformation 上传 代码 用cloudformation 部署 测试代码 安装sam pip3 install --user aws-sam-cli git 克隆代码 git clone https://github.com/gemerick/spring-boot-lambda -b lambda mvn clean package 创建s3 bucket aws s3 mb s3://spring-boot-lambda-20100905 拷贝jar 到S3 ,更新sam的template aws cloudformation package --template-file sam.yaml --output-template-file target/output-sam.……

阅读全文

Aws ecs tutorial

Aws ecs 简单来说就是host docker container,跟K8S类似,如果用过k8s,那么ecs非常的好理解 本文主要按照 Gentle Introduction to How AWS ECS Works with Example Tutorial 搭建 关于ECS的专业的词汇 Task Definition :实际就是要给launch configration,比如暴露端口号,用什么docker image,cpu 内存需要多少,运行docker 的command,环境变量 Task :简单来说就是一个running instance Service :一组task Cluster :一组task 跑在一个或者多个 constainer 里面 Container Instance :容器实例里面跑的是多个 task 按照此图搭建一组ecs的服务 创建一个ecs cluster 创建一个ecsServiceRole 创建Task Definition 创建elb和 target group 创建 service,里面只有一个task 检查运行情况 把service里面的task 改为4 创建一个ecs cluster 创建secrutiry group my-ecs-sg……

阅读全文

aws数据库迁移工具简介

Aws数据库迁移工具简介 越来越多的公司选择把服务迁移到云上,那么数据库的迁移尤其重要,亚马逊提供了数据迁移的工具 sct(schema converstion tool) 和 dms (data migration service)两个工具协作帮助客户从线下数据库导入到线上数据库,source 和 target 的database可以不是一种数据库类型,比如从mysql到oracle,或者mysql 到postgresql 简单介绍一下sct,简单点来说就是数据库schema转换工具,把本地的数据库的schema转换为aws线上目标数据库的schema,然后在线上导入这个schema生成数据库,然后用DMS帮你把数据导出到aws上 把aws mysql RDS 数据库 导出到 aws postgresql RDS 实验的目标就是把mysql数据库迁移到postgresql,由于在aws cloud上做比较方面,所以选择了都在云上来迁移做实验 Down load Aws schema convertion tool create mysql database on aws create database:test and table myclass with 2 column:id name test id name 1 hello 2 kitty create postgresql database on aws Open aws sct……

阅读全文

eni or eip can not be deleted

我几乎删除了所有的service,但是eni就是不让我删除 关联的eip也不让删除 我去aws社区看了很多帖子最后发现主要原因有两个地方 efs 使用eni nat gatway 使用了eni 根据这两点,我去查找,果然有个natgateway 使用eni,删除掉nat gateway后,eni可以删除,eip可以release了 ……

阅读全文

一个ec2 instance上配置多个eni

一个ec2 instance 配置多网卡 首先要确定你需要几个公网IP,以2个为例 首先要确定你需要几个网卡,以2个为例 申请两个 elastic ip:IP1 ip2 申请两个eni(network interface):eni1,eni2 创建一个ec2 把ip1 绑定到eni1,elastic ip->选中IP->associate->resource type:network interface -> private ip 自动选择 把ip2 绑定到eni2,此处省略步骤 把eni1绑定到ec2,network interface 页面->选择eni1->attach-> 选择 ec2 instance id 把eni2绑定到ec2,此处省略步骤 在ec2 instance 页面,看到iP里面公网IP只有一个,private ip 有2个 为什么少了一个?用putty connnect 这个两个ip,都是没有问题,ec2 的console不显示而已 [ec2-user@ip-172-31-1-176 ~]$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 172.31.1.176 netmask 255.255.255.0 broadcast 172.31.1.255 inet6 fe80::8a:93ff:fefd:ef5c prefixlen 64 scopeid 0x20<link> ether 02:8a:93:fd:ef:5c txqueuelen 1000 (Ethernet) RX packets 4115218 bytes 1170825027 (1.……

阅读全文

service catalog 简介

Aws service catalog 简介 aws service catalog 从字面上看就是服务目录,也就是说一些服务放入一组,进行统一的规划,那里一些可以进行统一的规划呢? 几个关键词 portfolio product constraint 傳統資源創建存在問題 從亞馬遜的blog上盜圖 上圖存在的幾個問題非常明顯 創建了一組資源,資源與資源之間無法互訪 EC2要訪問s3 ,那麼需要管理員授權 管理授權就要破壞兩個原則:service self-sufficient不滿足,最小權利原則(那就要定義允許ec2訪問s3的policy,所有的實例都可以訪問) 如何做到產品內部服務可以互訪,而產品外部的服務無權訪問呢? 從亞馬遜的blog上盜圖 A和B是兩個portfolio ,組內可以互訪,但是A和B之間無法訪問 一個使用場景介紹 從亞馬遜的blog上盜圖 比如產品添加了一個s3-08的一個bucket,如果做到允許EC2_04訪問,而不允許其他產品或者本產品內部其他EC2訪問的呢?這就要用到 service catalog來解決 具體例子請看 (https://aws.amazon.com/blogs/mt/create-a-security-partition-for-your-applications-using-aws-service-catalog-and-aws-lambda/) ……

阅读全文

使用Aws sts创建临时credential

Aws sts 简介 简单来说就是aws通过sts服务生成临时的credential给用户使用,他们可以设置有效期,自动失效,这也是amazon best practice 里面建议的方式 实验准备 创建 User 创建 Role 创建 s3 作为测试 为User创建sts assumeRole 的访问策略 在EC2上使用Aws cli 创建 历史的credential 访问s3 Create an IAM user https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/users input name: mystsuser access type programmatic access 其他保持默认 Create role for antoher aws account https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/roles 选择:another aws account Account ID: 找到上面的user 的arn,XXX就是ID (arn:aws:iam::XXXX:user/mystsuser) Attach plicy 搜索s3,选择 AmanzonS3ReadOnlyAccess,next reviews and create Role,input role name:sts-s3-read-only 创建完毕后,Update/Modify Trust Relationships replace (this is the arn of the user what you created) with arn:aws:iam::XXXX:user/mystsuser……

阅读全文

使用Aws System Manager 统一管理 aws resource

使用Aws System Manager 统一管理 aws resource Aws system Manager 简介 AWS Systems Manager gives you visibility and control of your infrastructure on AWS. Systems Manager provides a unified use:qr interface so you can view operational data from multiple AWS services and allows you to automate operational tasks across your AWS resources Aws system manager AWS 让您能够查看和控制 AWS 上的基础设施。Systems Manager 可以提供一个统一的用户界面,供您查看多种 AWS 服务的运行数据,并在 AWS 资源上自动执行操作任务。 使用场景 比如我有个20台 linux ec2,不管什么类型的,只要安装centyos,那么都要给他安装 ,cloudwatch agent 来对系统的disk和memory进行监控 实验的前置条件 你的系统上必须安装SSM Agent 你的EC2的role 必须具有 AmazonEC2RoleforSSM 的policy attach上去 安装SSM agent Intel (x86_64) 64 位实例: sudo yum install -y https://s3.……

阅读全文

NAT instance setup 简介

AWS NAT instance setup 简介 NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 AWS NAT gateway Aws 有專門的nat gateway,並且是HA的,只要創建gateway然後更改一下,subnet的路由就可以了,所以自己搭建一個nat gateway實際並不是aws的範疇,實際是一個linux系統的問題 手動搭建一個nat instance private subnet1/ instance1 / sg1(secrutiry group) / internal IP1 ->local node1 public subnet2/ instance2 / sg2(sercirity group) / internal IP2 /public ip2 -> proxy node2 配置proxy node vi /etc/sysctl.conf net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE 192.168.1.0/24 為本地網絡CIDR EC2 頁面,選中proxy node2 ->Action ->Networking ->Disable source/Desk Check……

阅读全文

我们为什么需要K8S

我们为什么需要K8S 我们用最常用的一个例子LAMP(Linux/Apache/Mysql/PHP or Python or perl)搭建一個負載均均衡的多節點的網站,假如不考慮mysql環節,我們只考慮負載均衡和多節點的問題。 1:如果我们在本地数据中心进行产品部署的话,我们需要那些服务 负载均衡 LB 扩容和缩放 auto scaling 高可用 HA,一個節點挂掉,如果有新的節點自動產生take over他的服務 日志如何同步到一個中心? Docker部署或者裸程序 反向代理服務 那么问题来了,几乎所有的服务都需要我们自己部署和搭建,我们的基础设施,完全依赖裸的操作系统,我们要全部搭建,举几个最简单的例子:如何决定部署多少个Docker容器?如何让这些容器的服务负载均衡?每个容器里面的日志如何同步?任何一个docker容器服务挂掉该如何处理? 我们操作系统的优化,硬件和网络高可用性,等等目前这些问题都需要我们在本地数据中心来实现,无论是复杂度还是需要硬件成本和技术都是非常高的。 2:如果在aws云上我们使用服务 LB(health check等配置) autoscaling cloudwatch logs 创建Lauch configuration 创建image 里面包含我们应用程序或者包含docker 日志的同步可以同步到elasticsearch服務 反向代理(使用lb的或者image裏面自己搭建nginx根據需要) 我们发现如果我们使用aws来构建我们的服务的话,这里面有很多成熟的服务我们可以拿来使用,这里面我们需要完成各个服务的配置,如果我们使用alicloud或者azure等各个服务平台的配置都是不一样的,即便我们有devops,我们使用terraform和assible来做devops也需要很多不同的代码,跨平台的移植非常麻煩 3. 使用K8s 是否需要負載均衡?是,k8s service本身就是負載均衡 是否需要考慮需要節點的擴容和縮放?是,K8s pod本身就支持autoscaling擴容和縮放 日志如何同步?可以直接使用K8s的存儲管理,可以不用第三方的服務 是否支持容器?一直都是以容器為基本單位就行部署的 系統的可移植性如何?你的程序無論在本地數據中心的K8S還是在各個云服務平臺的k8s上,devops的代碼的改動幾乎沒有多少,完全是跨平臺的。無論是開發者還是devops都可以聚焦於你的業務實現 6.反向代理,直接使用service ingress 就可以很容易解決 總之,k8S提供了你需要的完美的一體化的解決方案,所有的這些服務都集成在K8S内部,如果使用一些定制化的k8S平臺,比如openshit還集成了更多的開發和devops的工具在裏面,可以更快的開發和測試和部署,讓我們的用戶效率大大提高。……

阅读全文

security group vs network acl

Difference between Security Groups and Network Access Control List (NACL) Scope Network ACLs are applicable at the subnet level, so any instance in the subnet with an associated NACL will follow rules of NACL Security groups has to be assigned explicitly to the instance. This means any instances within the subnet group gets the rule applied. State: Stateful or Stateless Security groups are stateful.If you allow an incoming port 80,the outgoing port will be automatically opened Network ACLs are stateless .……

阅读全文

如何配置jenkins新节点

jenkins 节点 简介 在企业里面使用Jenkins自动部署时,大部分企业更新发布几个软件版本,但是对于一些公司有非常多的业务线或者产品来说,Jenkins就需要同时处理很多的任务,这时候就需要借助Jenkins多个node或者我们所说的Jenkins分布式SLAVE节点,来分开处理多个产品或者业务线的部署,目的就是master节点用来分配任务,slave节点来具体执行部署任务 配置 slave节点 jenkins ->manage jenins -> manage node and cloud ->new node node name:test ,选择permanent node 填好number of executors:1 ,remote root,launch method:launch agent via ssh,Host,Credentials, Host Key Verification Strategy,known hosts file verification strategy ,availability:keep agent online as much as possible 在slave上安装各种需要软件 一定要安装相关的plugin和global tool configuration里面配置相关的工具软件 e 创建一个pipeline测试一下 pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } } post { always { echo 'I will .……

阅读全文

面试问题集合

面试问题结合 为什么要使用Kafka在你们项目 使用什么方式来解决微服务的事务问题Seata 支持多种事物框架 如有大量的并发 HTTP 请求到同一个API如何设计 连接池,keep-alive,socket-timeout,connect-time等设置 如何保证一个高并发的程序能够很好的服务用户,该怎么设计 如何劝说客户迁移到云 K8s能给企业带来什么 如何设计一个websocket客户端的高可用 你为什么觉得你适合这个职位 你对你的职业生涯有什么规划 英文中文的自我介绍 为什么要使用elasticsearch 为什么要使用云服务 mysql索引为什么可以提高速度,elasticsearch倒排索引原理 java 查看jvm一些命令jstack jstat jmap mariadb和mysqldb区别 Solution architect Enterprise architect technical architect 区别 作为一个云架构师你要考哪些stakeholder的诉求 作为一个架构师需要哪些能力 什么是蓝绿发布/灰度发布/滚动发布 RTO RPO aws 混合云网络构建,AWS VPC网络如何通信 aws 私有云在公有云上备份 aws 异地多活.https://aws.amazon.com/cn/blogs/china/corporate-cloud-travel-hybrid-cloud-construction-and-common-cloud-application-scenarios/ 如何设计一个高并发的大数据处理系统,模块解耦,分布式处理,数据的分片和副本,流数据,网络设计和搭建,日志的处理 如果在咨詢行業我們我們處理不同行業客戶的產品的架構,我們怎麽才可以做好這樣的工作 ……

阅读全文

k8s使用ingress总结

安装准备 Centos7.7 vm 或者真实的物理机三台(master一台,node两台) 硬件要求2GB ram,最低2CPU,最少32GB 硬盘 节点之间最好网络互通,如果不考虑安全可以关闭firewalld 可以访问到外部网络,因为需要网络资源,比如yum源和其他k8s需要的yaml文件 需要安装和配置 yum源配置 防火墙selinux的关闭与配置 swap分区配置 桥接ipv4流量交给iptables 文件句柄数的限制 Docker的安装 Kubeadmin,flannel 创建deployment,service,pod,ingress,ingress controller,kubernets-dashboard 具体安装步骤 VM 网络选择bridge模式 master:192.168.25.200 node:192.168.25.187⁄192.168.25.188 防火墙 $ systemctl stop firewalld $ systemctl disable firewalld Selinux $ sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config $ sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config $ setenforce 0 关闭swap swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab 网络转发 cat > /etc/sysctl.d/k8s.conf << EOF net.……

阅读全文

裸金属服务器使用

什么裸金属服务器 裸金属服务器(Bare Metal Server,BMS)是一款兼具弹性云服务器和物理机性能的计算类服务,为您和您的企业提供专属的云上物理服务器,为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能以及数据安全。租户可灵活申请,按需使用。 裸金属服务器的开通是自助完成的,您只需要指定具体的服务器类型、镜像、所需要的网络配置等,即可在短时间内获得所需的裸金属服务器。服务器供应、运维工作交由华为云,您可以专注于业务创新。 产品架构 裸金属服务器在不同可用区中部署(可用区之间通过内网连接),部分可用区发生故障后不会影响同一区域内的其他可用区。 可以通过虚拟私有云建立专属的网络环境,设置子网、安全组,并通过弹性公网IP实现外网链接(需带宽支持)。 通过镜像服务,可以对裸金属服务器安装镜像,也可以通过私有镜像批量创建裸金属服务器,实现快速的业务部署。 通过云硬盘服务实现数据存储,并通过云硬盘备份服务实现数据的备份和恢复。 云监控是保持裸金属服务器可靠性、可用性和性能的重要部分,通过云监控,用户可以观察裸金属服务器资源。 云备份提供对云硬盘和裸金属服务器的备份保护服务,支持基于快照技术的备份服务,并支持利用备份数据恢复服务器和磁盘的数据。 华为裸金属的服务器的架构 与物理机和虚拟机的对比 什么场景下使用裸金属服务器 裸金属服务与一般云服务器最大的区别是是虚拟化与非虚拟化,虚拟化的缺点就是性能损失,操作系统和应用程序在调用硬件资源的时候,没有直接掌控,而是通过虚拟化软件间接管理的。 - 高安全性和法规要求 - 高性能计算场景 - 资源独占的场景 不同厂家的裸金属服务器的服务差别 有很多小厂的裸金属服务器,说实话就是一台独立主机,独立的独享宽带的网络(可以定制宽带),但是网络无法定制,比如没有VPC的选项,没有安全组,要自己通过防火墙软件管安全,也没有网络硬盘,说白了就是一台独立的远程主机。阿里云华为云这些已经非常成熟了,跟网络主机的区别不是太大,区别就是一个非虚拟化的主机而已,其他的地方基本上区别不大。……

阅读全文

裸金属服务器遇到的docker容器访问问题

问题描述 我们本地数据中心服务器处理与客户的接口的时候发现网络有严重的延迟,然后我们又有数据合规方面的问题,我们就采用云端的裸金属服务器,安装了docker后发现docker无法访问到主机。 问题发现 docker exec -ti docker-id bash 进入主机 在docker主机内部telnet 主机IP 端口 发现无法访问 退出虚拟主机在主机执行telnet 主机IP 端口 ,是可以访问的 检查网络 原来是docker0 与主机eth0 之间通信问题被firewall屏蔽了 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.1/16" accept" firewall-cmd --reload ……

阅读全文

JDk版本問題造成的cglib運行時候出錯

異常信息 Caused by: java.lang.ExceptionInInitializerError: null at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:122) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:110) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:405) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] ... 20 common frames omitted Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1134affc at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) ~[spring-core-5.……

阅读全文

如何测试linux的tcp和udp端口

如何测试linux的tcp和udp端口 测试tcp 一般用使用 telnet telnet 192.168.12.10 22 telnet 不支持udp协议,所以我们可以使用nc,nc可以支持tcp也可以支持udp yum install -y nc nc -z -v 192.168.10.12 22 #tcp nc -z -v -u 192.168.10.12 123 # udp ……

阅读全文

为什么要使用epel

Linux 安装包的痛苦经历 libcurl.so: libssh2.so.1: cannot open shared object file: No such file or directory libssl.so.10: cannot open shared object file: No such file or directory 如果遇到以上以上情况,libcurl需要libssh2依赖,那我们最希望的最法无非是yum install libssh2 libssl希望能安装好,那就解决了依赖的问题了,但是问题是没有 Last metadata expiration check: 2:33:40 ago on 18 Mar 2019 02:09:36 PM CST. No match for argument: libssh2 Error: Unable to find a match: libssh2 遇到这样的问题我们一般会去找一个rpm包去安装,通过rpm -ivh libssh2.rpm 发现缺少依赖 Requires libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcrypto.so.3()(64bit) libcrypto.so.3(OPENSSL_3.0.0)(64bit) libssl.……

阅读全文

Openvpn最简单的安装方式

为什么会用到vpn vpn是我们经常会用到的工具,比如有些程序不允许我们在某些地区下载,有些网站我们没有办法看之类的,我们就vpn不管是pptp还是vpn无非改变都是路由问题,也就是你上网的出口的问题 openvpn openvpn是一款开源vpn软件,功能非常强大,用户非常多,遵循的是openvpn协议 缺点搭建有些复杂,但是有第三方的脚本协助搭建会非常简单 openvpn搭建借助于第三方脚本 作者git:https://github.com/Nyr/openvpn-install wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh 最后生成一个*.ovpn文件 下载并安装openvpn gui:https://openvpn.net/community-downloads/ 用安装好的客户端打开*.ovpn就可以登录远程的vpn服务器了 ……

阅读全文

python一些集合

Python 面試題目 列表(list)和元组(tuple)有什么区别? 列表是可变的。创建后可以对其进行修改 元组是不可变的。元组一旦创建,就不能对其进行更改 列表表示的是顺序。它们是有序序列,通常是同一类型的对象 [“APPLE”,“PEAR”,“ORANGE”] 元组表示的是结构。可以用来存储不同数据类型的元素 [1,“eric”,1999-08-10,24] 什么是装饰器(decorator) 解释Range函数 解释map函数的工作原理 解释reduce函数的工作原理。 解释filter函数的工作原理 Python是按引用调用还是按值调用? 列表乘法是如何工作的? 类中的“self”指的是什么? 如何在Python中连接列表? 列表和数组有什么区别? list vs array Pandas 举出几个可变和不可变对象的例子 模块(module)和包(package)有什么区别? 在迭代序列时,为什么要使用enumerate? pass、continue和break之间有什么区别? 如何将for循环转换为使用递推式构造列表(list comprehension)? Python中的异常处理是如何进行的? 什么是init?init是Python中的方法或者结构。 什么是lambda函数? Python中的self是什么?self是类的实例或对象。 Python中的函数方法是什么? python中是否需要缩进? python是否区分大小写? Python中的局部变量和全局变量是什么? 什么是python模块?Python中有哪些常用的内置模块? Python中的命名空间是什么? 如何在Python中管理内存?……

阅读全文

Ansible简介

Ansible 简介 ansible是基于Python开发,集合了众多运维工具(puppet、chef)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。最大的特点就是ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。 ## 特点 ## 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作; 默认使用SSH协议对设备进行管理; 有大量常规运维操作模块,可实现日常绝大部分操作; 配置简单、功能强大、扩展性强; 支持API及自定义模块,可通过Python轻松扩展; 通过Playbooks来定制强大的配置、状态管理; 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可; 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。 任务执行方式 ad-hoc模式(点对点模式) 使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。 playbook模式 是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能.比如我们拷贝一个文件到主机,然后授予权限,然后启动程序这几个步骤结合在一起 Aansbile 文件和命令 ansible.cfg inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置 library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以 forks = 5 #并发连接数,默认为5 sudo_user = root #设置默认执行命令的用户 remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全 host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例 timeout = 60 #设置SSH连接的超时时间,单位为秒 log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志) inventory 文件 不分组……

阅读全文

linux最大文件打开数

文件最大打开数 如果服务器提供TCP服务(TCP层或者HTTP层),在并发访问量持续很高时,容易产生too many open files错误。这时查看netstat可以发现很多TIME_WAIT状态的链接,这说明大量链接处于半开状态,已经完成了请求响应,然后进行下一步操作,如果句柄数(文件打开数)超过了阈值,那就只能等待或者出错 解决方案 系统内核的修改 cat /proc/sys/fs/file-max sysctl -a sysctl -p 每个用户级别的修改 ulimit -n 1024000 (临时修改) vim /etc/security/limits.conf * soft nofile 2048 * hard nofile 2048 如果阿里云或者aws云里面的centos都是被优化过的,默认的1024都被修改成了65536了,所以对于大部分人来说足够用了 ……

阅读全文

linux的tree命令

linux tree command Centos 是默认不带tree 命令的,如果要使用首先要install tree command yum install -y tree 使用tree 显示目录的深度为2级 tree -L 2 . ├── easy-rsa-old-2.3.3 │ ├── configure.ac │ ├── COPYING │ ├── COPYRIGHT.GPL │ ├── distro │ ├── doc │ ├── easy-rsa │ └── Makefile.am ├── frgs.log ├── frp_0.32.1_linux_amd64 │ ├── frgs.log │ ├── frpc │ ├── frpc_full.ini │ ├── frpc.ini │ ├── frps │ ├── frps_full.ini │ ├── frps.ini │ ├── frps.……

阅读全文

vpn客户端工具pptp介绍

pptp 安装 yum install ppp pptp pptp-setup -y 创建 链接文件 /etc/ppp/peers/pptp pty "pptp 039.9966.org --nolaunchpppd --debug" name hk789 password ff800800 remotename PPTP require-mppe-128 require-mschap-v2 refuse-eap refuse-pap refuse-chap refuse-mschap noauth debug persist maxfail 0 defaultroute #replacedefaultroute #usepeerdns 执行命令 modprobe nf_conntrack_pptp pppd call pptp ……

阅读全文

lvm空间扩容

[root@localhost ~]# df -H Filesystem Size Used Avail Use% Mounted on devtmpfs 17G 0 17G 0% /dev tmpfs 17G 0 17G 0% /dev/shm tmpfs 17G 9.1M 17G 1% /run tmpfs 17G 0 17G 0% /sys/fs/cgroup /dev/mapper/centos-root 54G 1.4G 53G 3% / /dev/sda2 1.1G 148M 916M 14% /boot /dev/sda1 210M 12M 198M 6% /boot/efi /dev/mapper/centos-home 12T 35M 12T 1% /home tmpfs 3.4G 0 3.4G 0% /run/user/0 分区不够合理 root 下面空间不够用 umount /home lvreduce -L 5T /dev/mapper/centos-home lvextend -L +5T /dev/mapper/centos-root xfs_growfs /dev/mapper/centos-root mkfs.……

阅读全文

centos使用ssh-key免密登录

centos ssh login 免密码登录 修改linux主机sshd配置 vi /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys /sbin/service sshd restart 生成密钥,包括 id_rsa私钥,id_rsa.pub公钥 ssh-keygen -t rsa 更改文件名 mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 拷贝id_rsa文件内容到任何一个linux客户端,remote.pem,使用ssh登录 ssh -i remote.pem user@host ……

阅读全文

jvm参数优化

相关链接 https://blog.csdn.net/lingbo229/article/details/82586822 https://www.iteye.com/blog/kakaluyi-774227 https://blog.csdn.net/qq_44831907/article/details/113342146 https://www.cnblogs.com/jpfss/p/11050411.html ……

阅读全文

jenkins简介

什么是CI和CD CI(Continuous integration,中文意思是持续集成)/ CD(Continuous Delivery, 中文意思持续交付) CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。 CI/CD 的核心概念是持续集成、持续交付和持续部署。它是作为一个面向开发和运营团队的解决方案,主要针对在集成新代码时所引发的问题(也称为:“集成地狱”)。 CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。 jenkins简介 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。可集成使用版本控制工具有SVN、GIT,以及构建工具有Maven、Ant、Gradle。 特点 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持 易于配置-所有配置都是通过其提供的web界面实现; 有大量的插件可以配置使用,比如email通知结果,git,maven 附带了很多其他的功能比如用户密码的加密 可以支持备份,迁移,升级 还可以通过完全编程的方式Jenkinsfile,devops来实现纯代码的方式完全CI/CD 可以支持分布式的多个slave agent 可以保存每次build日志方便查阅 CI/CD 优势 1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量 2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能 3. CI/CD 具有高度的自动化 就是减少人工操作的事务,可以通过预先准备的脚本一次性运行,是我们内部或者外部用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷. 放几张图 ……

阅读全文

什么是AI 人工智能(AI)是指计算机系统能够执行人类通常需要使用智力才能完成的任务的能力。这些任务可以包括语音识别、图像识别、自然语言处理、决策制定等等。人工智能的目标是让计算机拥有类似人类的智能水平,能够像人一样学习、推理、理解和适应环境。 什么是ML 机器学习(ML)是一种人工智能的分支,其主要关注如何让计算机根据数据自动学习并改进算法,而不需要人工干预。换句话说,机器学习是一种数据驱动的方法,通过分析和学习数据中的模式和规律,让计算机能够自主地进行预测和决策。机器学习算法通常可以分为监督学习、无监督学习、半监督学习和强化学习等几种类型。 什么是DL 深度学习(DL)是机器学习的一种特殊形式,其主要依赖于深层神经网络(DNN)来实现数据的学习和处理。深度学习的主要特点是可以从大量的未标记数据中进行学习,并生成高度抽象的特征表示。深度学习已经被广泛应用于图像和语音识别、自然语言处理、推荐系统等领域,并在这些领域中取得了惊人的成果。 AI,ML和DL的应用领域 人工智能、机器学习和深度学习已经在各个领域得到了广泛的应用,这里列举几个典型的应用领域。 自然语言处理(NLP):自然语言处理是人工智能领域的一个重要应用方向,其主要目标是让计算机能够理解、分析和生成自然语言。在这个领域中,机器学习和深度学习算法被广泛应用于文本分类、情感分析、机器翻译、问答系统等任务。 计算机视觉(CV):计算机视觉是指让计算机能够理解和分析图像和视频,并从中提取有用的信息。在这个领域中,深度学习算法已经成为了主流,广泛应用于图像分类、目标检测、物体跟踪、人脸识别等任务。 语音识别(ASR):语音识别是指让计算机能够理解和转换人类语音的能力。在这个领域中,深度学习算法已经成为了主流,广泛应用于语音识别、语音合成等任务。 推荐系统:推荐系统是指根据用户的历史行为、兴趣和偏好,向用户推荐个性化的商品、服务或信息的系统。在这个领域中,机器学习和深度学习算法被广泛应用于用户行为分析、特征提取、推荐模型建立等任务。 自动驾驶:自动驾驶技术是指让汽车、飞机、无人机等交通工具能够自主地行驶和操作的技术。在这个领域中,深度学习算法被广泛应用于图像处理、目标检测、障碍物识别等任务。 AI、ML和DL的技术原理 人工智能、机器学习和深度学习的实现都依赖于一些基础技术和算法,下面介绍其中一些常见的技术原理。 神经网络:神经网络是指一种模拟人类神经系统的计算模型,其基本单元是神经元。深度学习中的神经网络通常包括输入层、隐藏层和输出层,其中隐藏层可以有多层。不同的神经网络结构和算法可以应用于不同的任务。 卷积神经网络(CNN):卷积神经网络是一种特殊的神经网络结构,其主要针对图像和视频等二维数据的处理。卷积神经网络中的卷积层和池化层可以有效提取图像中的特征,并通过全连接层进行分类和识别。 循环神经网络(RNN):循环神经网络是一种特殊的神经网络结构,其主要针对序列数据的处理。循环神经网络可以通过循环连接来处理序列数据中的时序信息,广泛应用于语音识别、机器翻译等任务。 深度学习框架 深度学习框架是指一些基于编程语言的工具箱,可以方便地构建和训练深度学习模型。常见的深度学习框架包括TensorFlow、PyTorch、Keras等。 AI、ML和DL的区别 尽管人工智能、机器学习和深度学习的概念和应用有所重叠,但它们之间还是存在一些明显的区别。 技术原理不同:人工智能是一个比较宽泛的概念,包括了许多技术和算法;机器学习是一种数据驱动的方法,主要关注如何让计算机自动学习和改进算法;深度学习是机器学习的一种特殊形式,依赖于深层神经网络来实现数据的学习和处理。 应用场景不同:人工智能、机器学习和深度学习都有广泛的应用场景,但其应用范围和任务却有所不同。人工智能的应用范围相对广泛,可以应用于语音识别、图像识别、自然语言处理等多个领域;机器学习主要应用于数据挖掘、预测分析、模式识别等领域;深度学习则主要应用于计算机视觉、自然语言处理、推荐系统等领域。 什么是生成式AI 生成式人工智能(Generative Artificial Intelligence,简称生成式 AI)是一种基于机器学习和人工智能技术的范畴,其目标是让计算机系统能够自主地生成各种类型的数据,如文本、图像、音频等,而不仅仅是对已有数据的模仿或分类。生成式 AI 的核心能力在于创造新的内容,而不仅仅是对已知模式的重复应用。其中,生成式人工智能模型是生成式 AI 的重要组成部分,而 chatGPT 就是其中的一种代表性模型。 生成式 AI 的原理基于深度学习,特别是神经网络技术,它可以通过分析大量的训练数据来学习数据的分布和模式,然后利用这些学习到的模式来生成新的数据。生成式 AI 不仅可以生成高质量的文本,还可以用于图像生成、音乐创作、视频生成等各种领域。 生成式 AI 模型的核心思想是使用生成对抗网络(GANs)、变分自编码器(VAEs)等架构,通过多层次的神经网络模块来模拟数据的分布。这些模型可以被训练成生成与训练数据相似但又独特的新数据,从而实现创造性的内容生成。生成式 AI 在自然语言处理领域中的代表模型是循环神经网络(RNNs)、长短时记忆网络(LSTMs)、转换器模型(如 GPT)等。 生成式ai应用 生成式 AI 的应用广泛,包括但不限于以下领域: 自动写作与内容生成: 生成式 AI 可以自动生成文章、新闻、故事等文本内容,帮助内容创作者提高效率。 艺术创作与设计: 在绘画、音乐、设计领域,生成式 AI 可以创造出独特的艺术品和创意作品。 虚拟现实与游戏开发: 生成式 AI 可以生成逼真的虚拟世界、地图、角色等,用于游戏设计和虚拟现实体验。 科学研究与创新: 在药物研发、分子设计、科学模拟等领域,生成式 AI 可以加速创新和发现。 语音合成与音乐创作: 生成式 AI 可以创作音乐、合成语音,并模仿各种声音风格。什么是service mesh Service Mesh又译作“服务网格”,作为服务间通信的基础设施层。Willian Morgan(Linkerd的CEO)如下定义Service Mesh。 Service Mesh 是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh 保证请求可以在这些拓扑中可靠地穿梭。在实际应用当中,Service Mesh 通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。 Service Mesh 实际上就是处于 TCP/IP 之上的一个抽象层,它假设底层的 L3/L4 网络能够点对点地传输字节(当然,它也假设网络环境是不可靠的,所以 Service Mesh 必须具备处理网络故障的能力)。 架构图 通过以上的架构图,很清晰的看到,最重要的两个部分就是control plane 和sidecar Control Plane:控制平面是服务网格的集中管理和配置层。它负责控制和协调sidecar代理的行为。它提供了一个控制平面API,允许管理员配置流量管理、安全性和可观测性的策略、规则和设置。 Sidecar(旁车):它基于Envoy代理。它是在同一Kubernetes POD中运行的另一个容器,负责处理所有的横切关注点。它基于旁车容器设计模式。•应用程序流量:微服务通过使用sidecar容器连接到其他微服务。应用程序流量基本上是Envoy sidecar代理容器之间的通信 Data Plane:数据平面指的是部署在每个服务实例旁边的一组sidecar代理组成的网络,用于与系统中的其他服务进行通信。它充当服务与网络的中间人。Sidecar代理处理入站和出站流量,拦截通信并提供其他功能。 Controllers:控制器是负责管理和控制网格行为的组件。它通常是一个软件组件,用于监视服务的状态和健康情况、配置流量路由和负载均衡规则、实施安全策略,并处理网格内服务之间通信的其他方面。 服务发现(Service Discovery):服务发现是服务网格架构中的一个重要组件。它使得服务能够动态地定位和连接到彼此,而无需硬编码的地址。 证书授权机构(Certificate Authority):它提供和管理根证书和中间证书,并执行证书签名操作。 应用程序微服务(Application Microservices):这些是组成应用程序的各个服务或微服务。它们负责处理特定的功能或任务。 API端点(API Endpoints):API端点是网格中的服务之间进行通信的入口点 方案 目前社区Service Mesh的开源解决方案有:Buoyant 公司推出的 Linkerd 和 Google、IBM 等厂商牵头的 Istio。Linkerd 更加成熟稳定些,Istio 功能更加丰富、设计上更为强大,社区相对也更加强大一些。 istio介绍 Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。Istio为希腊语,意思是”起航“。Istio是一个开源的服务网格平台,提供了一组工具和功能,用于管理和保护基于微服务的应用程序。它旨在解决复杂分布式系统中与服务之间通信、可观察性、安全性和流量管理相关的常见挑战。在其核心,Istio在应用程序中的每个微服务旁边部署一个称为Envoy的sidecar代理。这个sidecar代理拦截和管理服务的所有入站和出站流量,使得Istio可以控制和监控服务之间的通信。 优点: Istio拥有庞大的在线服务网格社区,并且在互联网上备受赞誉和讨论。其GitHub的贡献者远远超过Linkerd,数量上占据优势。•此外,它支持Kubernetes和VM模式。 缺点: Istio并非免费提供,使用它需要相当大的时间投入,包括阅读文档、设置、确保正常功能和持续维护。 在生产环境中实施和集成Istio可能需要几周甚至几个月的时间,这取决于基础架构的复杂性。 使用Istio需要相当大的资源开销。•与Linkerd不同,它缺乏内置的管理仪表板。 此外,Istio要求使用其自己的入口网关。 Istio控制平面仅在Kubernetes容器中受支持,没有可用于Istio数据平面的VM模式。什么是openshift OpenShift是红帽的云开发平台即服务(PaaS)。自由和开放源码的云计算平台使开发人员能够创建、测试和运行他们的应用程序,并且可以把它们部署到云中。OpenShift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。 OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat Enterprise Linux提供集成应用程序,运行库和一个配置可伸缩的多用户单实例的操作系统,以满足企业级应用的各种需求。 架构图 核心的概念 https://zhuanlan.zhihu.com/p/635160126?utm_id=0 容器(Container) 镜像(Image) 用户(User) 项目(Project) 容器沙箱(Pod) 部署(Deployment) 服务(Service) 路由(Router) 持久化存储(Persistent Storage) 模板(Template) 构建(Build)和镜像流(ImageStream) 为什么要使用openshift OpenShift的持续集成和持续部署(CI/CD)功能可以帮助开发者快速地将代码更改合并到主分支,并通过自动化的方式将其部署到生产环境,这不仅可以提高开发效率,还可以减少人为错误,提高软件的质量。 OpenShift的多租户支持功能使得不同的团队或者公司可以在同一个平台上共享资源,而不需要担心数据安全问题,每个租户都可以拥有自己的独立的应用程序、服务和数据库,这样就可以满足不同团队的需求。 OpenShift的应用市场功能提供了一个方便的平台,让开发者可以找到并使用各种预先构建的应用程序和服务,而不需要自己从头开始编写,这样不仅可以节省时间,还可以提高开发效率。 OpenShift的自动扩展功能可以根据应用程序的负载情况自动调整资源的分配,以确保应用程序的性能和可用性,这样可以避免因为资源不足而导致的应用程序崩溃,也可以在需求增加时快速地扩展应用程序的能力。 OpenShift的优势在于其简单易用、功能强大和灵活可扩展的特性,它可以帮助开发者快速地部署和管理应用程序,提高开发效率,降低运维成本。what is oauth2.0 OAuth 2.0, which stands for “Open Authorization”, is a standard designed to allow a website or application to access resources hosted by other web apps on behalf of a user. It replaced OAuth 1.0 in 2012 and is now the d industry standard for online authorization. OAuth 2.0 provides consented access and restricts actions of what the client app can perform on resources on behalf of the user, without ever sharing the user’s credentials.Devops DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality.DevOps is complementary with Agile software development; CI/CD is a best practice for devops and agile development. CI/CD bridges the gaps between development and operation activities and teams by enforcing automation in building, testing and deployment of applications.Architect design principle Techinical part Scaling workload Building resilient architecture Design for performance Loose coupling Data-driven design Security everywhere Automating everything Function part Design for compliance Design for operation Design for System monitoring Methodology part Design for agile dev Design for agile devopsArchitect Different architect Enterprise Architect play a key role when it comes to identifying business needs in context with external factors like competitors and internal factors like a company’s IT landscape. Solution Architect focused on details and solution technologies to address a specific business problem, it provides a channel between enterprise architecture and technical architecture Techinical Architect focused more on designing and implementing technical solutions.Centos临时目录的系统管理 Linux产生大量的临时文件和目录,例如/tmp、/run 。RHEL7或者CentOS7中,systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。旧版本系统使用watchtmp+cron来共同实现管理临时文件。 systemd启动后,其中一个启动的服务单元是systemd-tmpfiles-setup,该服务的命令为:systemd-tmpfiles –creat/–clean *conf , *conf是可选的,不写默认是使用所有配置文件 配置文件,优先级从上到下。 /etc/tmpfiles.d/*conf ,管理员可修改的配置文件 /run/tmpfiles.d/*conf ,daemon应用程序自己管理的配置文件,不建议更改 /usr/lib/tmpfiles.d/*conf,rpm软件安装时,自动更新的配置文件,不能更改 定期清理timer systemd定时器单元会按固定间隔调用systemd-tmpfiles --clean 。 systemctl status systemd-tmpfiles-clean.timer 查看timer状态。 systemctl cat systemd-tmpfiles-clean.timer 查看timer具体内容,也可以进入/usr/lib/systemd/system目录后使用more systemd-tmpfiles-clean.timer 来查看。 从timer具体内容可以知道系统启动15分钟后和每天会运行一次systemd-tmpfiles --clean.那么timer定时运行的是哪些服务呢? 是在systemd-tmpfiles-clean.service里面定义的: systemctl cat systemd-tmpfiles-clean.service可以查看。Centos 8 維護已經停止了 年前安裝了centos8.2 yum 的repo還是用的默認的,一切都正常,昨天在新的服務器上發現yum的repo已經無法使用了,我當時就意識到應該維護停止了,馬上去網上查一下,果然如此,如果想繼續使用請替換掉原來的mirror,使用centos-vault,https://mirrors.aliyun.com/centos-vault/ 或者 https://vault.centos.org/8.2.2004/ Centos 7 的維護還是會繼續到2024年 CentOS yes Community Enterprise Operating System( Community enterprise operating system ) An acronym for , yes 100% Reconstructed RHEL( Red Hat Enterprise Linux). Even though RHEL It costs money , but CentOS It's free. , Community supported businesses Linux Distribution version . Good at Linux And don't want to pay RHEL Support fee developers and companies always choose CentOS To save money and get enterprise software .what is jwt JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt structure A well-formed JWT consists of three concatenated Base64url-encoded strings, separated by dots (.): JOSE Header: contains metadata about the type of token and the cryptographic algorithms used to secure its contents. JWS payload (set of claims): contains verifiable security statements, such as the identity of the user and the permissions they are allowed.什么是 JWT 一个JWT,应该是如下形式的: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9. TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ JWT 解决什么问题? JWT的主要目的是在服务端和客户端之间以安全的方式来转移声明。主要的应用场景如下所示: 认证 Authentication; 授权 Authorization // 注意这两个单词的区别; 联合识别; 客户端会话(无状态的会话); 客户端机密。 JWT 的一些名词解释 JWS:Signed JWT签名过的jwt JWE:Encrypted JWT部分payload经过加密的jwt;目前加密payload的操作不是很普及; JWK:JWT的密钥,也就是我们常说的 scret; JWKset:JWT key set在非对称加密中,需要的是密钥对而非单独的密钥,在后文中会阐释; JWA:当前JWT所用到的密码学算法; nonsecure JWT:当头部的签名算法被设定为none的时候,该JWT是不安全的;因为签名的部分空缺,所有人都可以修改。 ### JWT的组成 一个通常你看到的jwt,由以下三部分组成,它们分别是: header:主要声明了JWT的签名算法; payload:主要承载了各种声明并传递明文数据; signture:拥有该部分的JWT被称为JWS,也就是签了名的JWS;没有该部分的JWT被称为nonsecure JWT 也就是不安全的JWT,此时header中声明的签名算法为none。 三个部分用·分割。形如 xxxxx.yyyyy.zzzzz的样式。 JWT header { “typ”: “JWT”, “alg”: “none”, “jti”: “4f1g23a12aa” } jwt header 的组成 头通常由两部分组成:令牌的类型,即JWT,以及正在使用的散列算法,例如HMAC SHA256或RSA。 当然,还有两个可选的部分,一个是jti,也就是JWT ID,代表了正在使用JWT的编号,这个编号在对应服务端应当唯一。当然,jti也可以放在payload中。 另一个是cty,也就是content type。这个比较少见,当payload为任意数据的时候,这个头无需设置,但是当内容也带有jwt的时候。也就是嵌套JWT的时候,这个值必须设定为jwt。这种情况比较少见。 jwt header 的加密算法 加密的方式如下: base64UrlEncode(header) >> eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIiwianRpIjoiNGYxZzIzYTEyYWEifQ JWT payload {本来使用工具或者服务 Pologon 美股数据供应商 Kafka Nettty Centos8.2 架构图 架构说明 Polygon是美股的数据供应商,提供美股tick级别的数据服务 美股开盘数据非常的大,平时可以达到6M/秒的传输速度,也就是说可以达到每秒6万条数据的传输速度 数据的传输是基于internet的传输,所以要保障数据在互联网上的快速传输必须基于长连接来实现,因此polygon提供了websocket服务 我们的app收到polygon websocket推送过来的数据要进行简单的解析和格式转换,然后发送到本地的kafka cluster中间件用来分发数据,给其他的应用来做大数据处理包括flink等大数据中间件 出现的问题 Polygon数据传输出现了频繁的中断1:Slow consumer slow consumer:https://polygon.io/docs/stocks/ws_getting-started 查看了一下polygon的技術文檔: if a client is consuming messages too slowly for too long, Polygon.io’s server-side buffer may get too large. If that happens, Polygon.io will terminate the WebSocket connection. You can check your account dashboard to see if a connection was terminated as a slow consumer. If this happens to you consistently, consider subscribing to fewer symbols or channels.本来使用工具或者服务 Jconsole Jstack prometheus 架构图 架构说明 This is an internal application (Not cloud) architect,we have big network traffic and lots of application ,we deploy in our own server we have a RabbitMQ server (which our data provider will send HKEX data to this server) we have an Application will consume the messages from MQ Our application will process the data and sending to Kafka and Elastic search本来使用工具或者服务 Alicloud vpc SLB PrivateLink endpoit zone and service ECS 架构图 架构说明 对于两个网络(VPC-A,VPC-B)的ECS提供的服务,要是A访问B,可以提供以下方案 B通过EIP或者IP或者绑定SLB,通过SLB的IP把B的服务暴露在公网上 A网络和B网络互联 通过privatelink来单向向让A网络的访问B网络的服务 分析上面优缺点 安全性不好,把服务暴露在公网 A和B网络直接互联创建路由成本太高,第二就是可能会造成网络冲突 通过privatelink私有网络连接成本低廉,单向的内网服务,不改变各自的网络配置 Privatelink 如何创建privatelink服务 privatelind endpoint service:需要关联一个SLB,此slb必须支持privatelink的SLB,slb后面就是ECS或者其他的rds等都可以 privatelink endpoint 创建的是时候需要跟endpoint service 连接 一旦创建并且链接成功,那么privatelink就可以生效了 privatelink endpoint 有一个DNS地址,我们可以通过地址直接访问,此地址是aliyun内网地址本文简介 我們跟數據供應商之間數據傳輸一直存在很多的問題,我們的網絡經過測速后非常的快,供應商也反復說他們的網速也非常快,那麽問題來了?既然大家都快,是不是在某個路由環節之間出現了問題呢? iperf 簡介 iperf是一种命令行工具,用于通过测量服务器之間可以处理的最大网络吞吐量来诊断网络速度问题。 iperf信息 iperf版本: iperf 3.1.3 官网地址: https://iperf.fr 安裝和運行 server rpm -ivh https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm iperf3 -s client rpm -ivh https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm iperf3 -c serverip -p 5201 運行結果 [root@PC-231 ~]# iperf3 -c 172.16.10.101 -p 5201 Connecting to host 172.16.10.101, port 5201 [ 4] local 192.168.25.231 port 59398 connected to 172.16.10.101 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.What is the AWS CDK? The AWS Cloud Development Kit (CDK) ,a framework for defining cloud infrastructure in code and provisioning it through AWS CloudFormation. CDK stack How does CDK work Build with high-level constructs that automatically provide sensible, secure defaults for your AWS resources, defining more infrastructure with less code. Use programming idioms like parameters, conditionals, loops, composition, and inheritance to model your system design from building blocks provided by AWS and others.本文简介 本来主要介绍云和本地的数据中心的对比,主要用阿里云来对比,作为aws和alicloud的认证工程师,我对云上的和自有数据中心架构系统做个详细的对比,本文,仅仅用alicloud 本系统简介 本系统主要是做美股和港股的数据处理,美股数据来源是polygon(基于websocket数据推送和restful查询api),港股的数据来源是港交所(UDP广播) 本系统功能:接收美股和港股的数据,并作本地的消息存储,用消息中间件来存储交易所数据,然用以一部分数据用来做大数据实时计算,一部数据用来做持久化的存储 本系统的架构图 本系統本地使用硬件 軟件 狀態 服務器 數量 存儲 數量 Kafka cluster centos8.2 5 ssd 4 raid5 Elatic search cluster centos8.2 3 ssd 4 raid5 Flink cluster centos8.2 3 ssd 4 raid5 Polygon subscriber single centos8.2 1 ssd 4 raid5 APP single centos8.2 1 ssd 4 raid5 本地數據中心存在的主要問題 硬件的問題 1.本文使用工具或者服务 Java 8 https://archive.apache.org/dist/kafka/3.0.0/kafka_2.13-3.0.0.tgz https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz Centos8.2 Zookeeper 簡介 ZooKeeper是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务,提供的功能包括:配置维护、命名服务、分布式同步、组服务等。Kafka的运行依赖ZooKeeper。 Broker注册 Topic注册 生产者负载均衡 消费者负载均衡 消费者注册 Kafka 簡介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量 即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 zookeeper 與kafka之間的關係 ZooKeeper用于分布式系统的协调,Kafka使用ZooKeeper也是基于相同的原因。ZooKeeper主要用来协调Kafka的各个broker,不仅可以实现broker的负载均衡,而且当增加了broker或者某个broker故障了,ZooKeeper将会通知生产者和消费者,这样可以保证整个系统正常运转。 安裝zooker和kafka 之前首先要做系統的優化和配置 文件句柄數的調整 oracle Jre8 安裝 磁盤的分區和挂載點必須滿足kafka大數量的存儲xfs分區 關閉selinux 防火墻暫時關閉(後面看可以統一規劃端口) 創建非root的kafka管理用戶並添加sudoer權限 注意事項 kafka是一個分佈式的消息系統,我們會臨時存儲消息,如果存儲消息的時間長,那麽需要大空間,所以分區的時候已經要注意,就是安裝kafka的時候存儲一定要挂載到大的硬盤空間上 Zookeeper 配置 # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored.使用terraform创建ecs用ansible完成ecs的provision 本文目标就是是用terraform创建ecs包括security group,disk,vpc,vswtich,然后用ansible来初始化和配置创建好的ecs 本文只是创建了一个单机ecs,后续的文章会有load balance出现 terrorm 创建ecs 什么是terraform terraform是云工具,也就是针对云平台的 terraform是在云平台上管理资源的,就是一个云资源编排工具 terraform目标是”Write, Plan, and create Infrastructure as Code”, 基础架构即代码。具体的说就是可以用代码来管理维护 IT 资源,把之前需要手动操作的一部分任务通过程序来自动化的完成,这样的做的结果非常明显:高效、不易出错。 Terraform 核心功能 基础架构即代码(Infrastructure as Code) 执行计划(Execution Plans) 资源图(Resource Graph) 自动化变更(Change Automation) terraform安装 下载https://www.terraform.io/downloads.html 设置环境变量(省略) 创建terraform 配置文件 main.tf provider "alicloud" { access_key = "xxx" secret_key = "xxx" region = "ap-southeast-1" #version = "~> 1.5.0" } data "alicloud_instance_types" "instance_type" { instance_type_family = "ecs.Install ansible on server Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等 Ansible包括控制节点(Control node)也叫主机,受控节点(Managed nodes)也叫客户机,只在控制节点安装就好了 ansible 优点 只需要在主机上安装ansible软件,客户机不需要安装 通讯协议SSH协议和SFTP 可并行执行程序,默认情况下,forks值为5,可以按需,在配置文件中增大该值 ansible(centos)安装和配置 yum install ansible 为了使Ansible与客户端通信,需要使用用户帐户配置管理机和客户机。为了方便快捷安全,一般会配置证书方式连接客户机 ssh-keygen ssh-copy-id ansible@node ip 使用ad-hoc 在客户执行命令,相当于命令行 /etc/ansible/hosts,最好谨慎使用hosts配置,安全问题需要解决 [docker] 192.168.25.173 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="xxx" 执行以下ping,命令里面的docker对应的上面文件的docker ansible docker -m ping 使用ad-hoc命令管理软件包,安装 ansible docker -m yum -a "name=docker state=present" -b 使用ad-hoc命令管理软件包,设置默认启动 ansible docker -b -m service -a "name=docker enabled=yes" 使用ad-hoc命令管理软件包,启动 ansible docker -b -m service -a "name=httpd state=started" 使用ansible-playbook 部署docker test-ansile.https vs http https比http安全原因是传输的过程中使用了加密,因为https在服务器端使用证书 证书的认证需要认证机构,随便一个https的证书阿里巴巴云最便宜的一年要2000多,aws更是贵到天上,所以对于个人程序员来来说最好有免费的证书 cerbot就是你的选择 cerbot简介 cerbot就是Electronic Frontier Foundation (EFF)这个机构给大家发的福利,简单的一句话来说就是给你提供3个月的免费证书,证书到期后继续免费续约,个人网站是用最方便,每三个月更新一次就可以了 cerbot 使用 cerbot 安装脚本 yum -y install yum-utils yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional sudo yum install certbot python2-certbot-nginx sudo certbot --nginx(sudo certbot certonly --nginx) echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null (auto renewal) cerbot 证书验证 To confirm that your site is set up properly, visit https://yourwebsite.vagrant 简介 VirtualBox 是一款开源虚拟机软件,vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。 BBC Vagrant 是基于VirtualBox创建的虚拟机,并通过Vagrant进行打包而得到的VM环境。在虚拟机中部署好开发环境并建立虚拟机和实体机的文件共享,在开发时,可以通过实体机进行文件修改,并经过虚拟机中的环境执行,从而实现不同操作系统的工作环境的轻松部署。 安装 vagrant和virtualbox 下载并安装VirtualBox( https://www.virtualbox.org/wiki/Downloads )。 VirtualBox 4.3.12下载地址(windows请用此链接):http://dlc-cdn.sun.com/virtualbox/4.3.12/index.html 下载并安装Vagrant( http://www.vagrantup.com/downloads.html )。 安装和定制box 下载windows 10 box文件。 https://app.vagrantup.com/mrlesmithjr/boxes/windows10/versions/1574780096/providers/virtualbox.box 到c:\vagrant\download 执行命令 vagrant box add win10 c:\vagrant\download\virtualbox.box cd c:\vagrant vagrant init win10 vagrant up 2> vagrant.log 查看模板文件c:\vagrant\Vagrantfile $script = <<-'SCRIPT' echo "starting wechat" ipconfig > c:\ip.log C:\Users\wechat\WeChat.exe > c:\wechat.log netstat > c:\netstat.log echo "started wechat" SCRIPT Vagrant.1.3. 手把手使用hugo搭建网站高级篇 1.3.1. 創建页面的目錄 hugo提供了目錄的支持table of content 創建目錄首先你的文章必須有標題 在layouts/_default/single.html 添加代碼 {{.TableOfContents}} {{ define "main" -}} <div class="post"> <h1>{{ .Title }}</h1> <time datetime={{ .Date.Format "2006-01-02T15:04:05Z0700" }} class="post-date">{{ .Date.Format "Mon, Jan 2, 2006" }}</time> {{.TableOfContents}} {{ .Content }} </div> {{ if .Site.DisqusShortname -}} <h2>Comments</h2> {{ template "_internal/disqus.html" . }} {{- end }} {{ partial "related.html" . }} {{- end }} 1.3.2. 创建搜索 伪站内搜索 使用google cse1.2. 手把手使用hugo搭建网站进阶篇 1.2.1. 自定义菜单 配置定义菜单栏 layouts/partials/sidebar.html <aside class="sidebar"> <div class="container sidebar-sticky"> <div class="sidebar-about"> <a href="{{ .Site.BaseURL }}"><h1>{{ .Site.Title }}</h1></a> <p class="lead"> {{ with .Site.Params.description }} {{.}} {{ else }}{{end}} </p> </div> <nav> <ul class="sidebar-nav"> {{ $currentPage := . }} {{ range .Site.Menus.main -}} <li> <a class="sidebar-nav-item{{if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }} active{{end}}" href="{{ .URL }}" title="{{ .Title }}">{{ .Name }}</a> </li> {{- end }} </ul> <ul class="sidebar-nav"><br/><br/><br/><br/><br/><br/><br/></ul> </nav> <p>{{ with .1.1. 手把手使用hugo搭建网站初级篇 1.1.1. Demo使用hugo的网站 https://www.flysnow.org/ https://www.gohugo.io https://www.netlify.com/ https://gohugo.io/showcase/ https://www.smashingmagazine.com/ 1.1.2. 部分主题 https://github.com/Vimux/Mainroad https://github.com/kingfsen/Mainroad https://themes.gohugo.io/academic/ https://themes.gohugo.io/beautifulhugo/ https://themes.gohugo.io/hyde/ https://themes.gohugo.io/hugo-theme-even/ https://github.com/rujews/maupassant-hugo 1.1.3. hugo跟wordpress其他建站工具的对比 wordpress 全球31%的网站使用wordpress,尽管他有各种主题和插件,但是也有非常多的缺点,安全性,seo不够友好,定制麻烦 hugo 最快的静态生成工具,seo友好,静态更安全,方便定制模板,缺点没有插件,如果要定制模板只能懂一点go的语法 wordpress是动态的并且还需要托管数据库,所以托管费用比较昂贵 hugo是生成静态的页面,在本地生成后上传到服务器就可以了,托管费用非常便宜,可以直接用免费的github托管 hugo不可以在线编辑 wordpress vs hugo Tables 静态/动态 托管 安全性 访问速度 在线编辑 markdown wordpress 动态 复杂 需要经常升级 快 可以 不支持 hugo 静态 简单 不需要打补丁 非常快 不可以 支持考试心得 考试成绩 852 背景 工作用到aws不到1年 有多年java开发经验 linux管理员,持有RHCE 准备周期 3周從準備到考試 每天8-12小时 做过实验的知识点列表 VPN endpoint/nat gateway/internet gateway/vpn/subnet/ACL RDS/Aurora/Reshift/Aurora/DynamoDB (snaphost copy az or cross region,ebs type change ,autoscaling ,entryption ,backup/replica ,Multi A-z,read/write unit) Cloudfront (OAI,SSL certificat ,validation TTL ,pre-signed URL) S3 (static websit ,ACL ,bucket policy,lifecyle) ec2 (Cloudwath agent install,ebs mount/unmount,snapshot,elasticip binding) Cloud53 (A/alias .routing policy) Athena on S3 SQL QUERY9.27 号考试通过了SAP(913分),心里终于落下一块石头.从开始准备到最后通过我用了数个星期的时间,平均每天超过10小时的准备.sap的难度比saa高不是一个级别的,涉及了大量的新的知识点.不仅仅需要知道每个知识点,还需要动手去实践,为此我写了20个几个blog都是尝试这里面的知识点,实际我做过的实验大概有40多个,几乎每天要做一个实验,因为时间的问题,没有把其他的整理到blog上来,也是一个遗憾,后面我会慢慢补充上来。 考前准备 aws 账号 :做实验用 最好有一些linux/network/dev experience 最好熟悉一门编程语言,java/.net/python/ruby/go/nodejs 最好熟悉json/yaml 如果考过saa最好了,saa是非常基础的aws认证 如果考过saa,最好保证300小时以上的学习时间 考试内容准备 印度小哥的一个考试心得基本上面面俱到了 https://www.linkedin.com/pulse/preparing-aws-certified-solutions-architect-2019-sap-c01-agarwal/ bilibili 上印度小哥sap视频 https://www.bilibili.com/video/av66737718?from=search&seid=1011549087963751322 如果听的懂建议听听 bilibili 上cloud guru的sap视频 https://www.bilibili.com/video/av39285864?from=search&seid=1657200592137432769 aws 本上的get-started https://aws.amazon.com/getting-started/ 建议尝试里面大部分的实验内容,只有实验的多了才能够理解每个服务以及服务于服务之间的关联AWS X-Ray 可以帮助开发人员分析与调试分布式生产应用程序,例如使用微服务架构构建的应用程序。借助 X-Ray,您可以了解应用程序及其底层服务的执行方式,从而识别和排查导致性能问题和错误的根本原因。X-Ray 可在请求通过应用程序时提供请求的端到端视图,并展示应用程序底层组件的映射。您可以使用 X-Ray 分析开发和生产中的应用程序,从简单的三层应用程序到包含上千种服务的复杂微服务应用程序。 簡單來說,xray是用來追踪服務與服務之間鏈條,每個服務之間的請求內容,時間,參數等信息 用api-gateway 和 lambda 實驗 本文用到的例子是前面的博文: Aws cloudformation deploy lambda and apigateway 只需要額外做以下兩步 開啟api-gateway的x-ray,api gateway console-> apis->spring-boot-lambda->stages->Prod->logs/tracing->enable x-ray tracing 開啟lambda的x-ray,functions->spring-boot-lambda-LambdaSpringBootFunction-7CK2QHXPRA6F->aws x-ray:active tracing test x-ray:fire a request to api gateway open x-ray console:service map:you will see a picture like below:aws migration from OP to cloud這是aws最注重的部分,關於遷移技術,aws提供了各種各樣的工具,比如遷移數據庫(sts,dms),遷移workload(aws server migration service),協助你計劃遷移收集信息的工具(aws application discovery service),track遷移進程的工具(migration hub),遷移海量數據的aws snowball or snowmobile,s3 acceleration, 加速數據傳輸的 dierct connect等等,從網絡到數據庫到文件,給你武裝到牙齒 以下是兩篇關於數據遷移的好文 https://medium.com/@awsontop/aws-cloud-migration-strategy-and-process-6ed38479735a https://www.slideshare.net/AmazonWebServices/accelerating-your-portfolio-migration-to-aws-using-aws-migration-hub-ent321-reinvent-2017OLAP在線分析工具越來越來成熟,從開始的數據倉庫,到強大的elk,再到雲,比如aws的 gaq(glue-athena-quicksight),當然aws也有elk在線服務 gaq vs elk,實際上是一類的產品,glue提供了crawler去爬去數據,類似 logstash,athena提供查詢工具類似elasticsearch ,quicksight 跟 kibana一樣ui.gaq是aws雲端的服務,沒有辦法部署在線下,elk既可以部署在op也可以部署在cloud上 這篇文章來自 https://medium.com/localz-engineering/serverless-big-data-start-here-aws-glue-athena-quicksite-4c70ecac9fe3 有一個圖片 實驗 cloudwatch agent 或者 application discovery agent 到ec2 cloud watch agent 或者 discovery agent sync log 到 s3 glue裡面創建crawler ,指定s3 glue裡面創建database 和table athena 寫sql語句查詢想要的數據 如果想要類似kinana那樣可視化的工具,那麼需要付費quicksight 完剛開始使用cognito服務的時候特別讓人困惑,有user pool 和 identity pool(Federated Identities),user pool裡面還有federation,federation裡面有identity provider. identity pool 裡面有autenticated provider裡面也有user pool ID! 納尼?這是什麼鬼? let’s forget the connection between them user pool 簡單來說就是提供一個用戶驗證的服務,比如用戶自定義用戶,用fb,GOOGLE,twitter等賬戶登錄,登錄後獲取一個token,用戶的每次請求帶著這個token就可以了,用戶登錄後獲取的是你個人應用的resource! ,比如你自己做了一個網站,登錄後可以管理自己用戶,權限,圖片等等,你有權限去訪問這些資源 identity pool 也是提供一個用戶認證的服務,用戶可以在裡面設置aws 的role,也就說用戶登錄後得到的aws的resource 的訪問權限,比如你可以訪問s3.只是這個登錄可以跟 user pool提供的服務去綁定,也可以不用user pool的服務直接用 identity pool裡面的provider去對接,也就說,如果你有google的id也可以登錄後獲取aws resource 資源的訪問權限,這個是登錄後aws通過sts生成臨時credential 來做到的 summary user pool 只是負責authentication,沒有authorization,即便有也是用戶本身應用的服務 identity pool,既可以authentication,又可以authoriztion,授權的是aws的resource 上幾張圖 幾個非常有價值的link https://serverless-stack.com/chapters/cognito-user-pool-vs-identity-pool.html https://gorillalogic.com/blog/java-integration-with-amazon-cognito/这是一个aws官方的文档,我认为最好的cognito的例子,如果理解这个sample,那么cognito就没有任何问题 https://aws.amazon.com/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/ 详解 廢話少說直接上圖 程序組成部分 - 靜態的代碼存放s3 - 動態的代碼存放lambda - 代碼的訪問入口通過api-gateway - 數據的存放時dynamoDB(程序登錄後有個點擊頁面位置生成的數據,與用戶驗證沒有太多關係) Cognito user pool 在user login 流程 - 用戶用用戶名+密碼(或mfa,這取決於cognito user pool的配置)請求登錄 - aws cognito user pool去驗證用戶 - 如果用戶通過驗證返回一個token - 下一次用戶用這個token來請求訪問 - aws cognito user pool 可以基本满足用户登录,如果涉及到权限可以跟自己数据进行绑定 - 这个例子里面特别要注意的是,api gateway 直接设置了 Authorizers :里面可以指定cognito 来对用戶進行驗證,不用額外寫程序來驗證,也就說每次訪問一個服務/ride.html,api-getway通過Authorizers直接去用cognito去驗證用戶的token - 這個例子分了兩個步驟,第一個步驟是直接登錄,登錄後獲得一個toke - 第二步驟是用api-gateway 自動驗證用戶的登錄,也就是authentication用Cloudformation 来部署 java 的lambda 和api gateway,这里要用到spring-boot写java 代码,需要用到s3,存放lambda代码,需要创建lambda function和api agetway,还需要用到sam Aws lambda with Spring Boot 本文用到的git代码来自 https://github.com/gemerick/spring-boot-lambda 本文的内容来自 https://keyholesoftware.com/2018/04/26/aws-lambda-with-spring-boot/ 本文的步骤 安装sam git 克隆现有代码 创建s3 bucket 用cloudformation 上传 代码 用cloudformation 部署 测试代码 安装sam pip3 install --user aws-sam-cli git 克隆代码 git clone https://github.com/gemerick/spring-boot-lambda -b lambda mvn clean package 创建s3 bucket aws s3 mb s3://spring-boot-lambda-20100905 拷贝jar 到S3 ,更新sam的template aws cloudformation package --template-file sam.yaml --output-template-file target/output-sam.Aws ecs 简单来说就是host docker container,跟K8S类似,如果用过k8s,那么ecs非常的好理解 本文主要按照 Gentle Introduction to How AWS ECS Works with Example Tutorial 搭建 关于ECS的专业的词汇 Task Definition :实际就是要给launch configration,比如暴露端口号,用什么docker image,cpu 内存需要多少,运行docker 的command,环境变量 Task :简单来说就是一个running instance Service :一组task Cluster :一组task 跑在一个或者多个 constainer 里面 Container Instance :容器实例里面跑的是多个 task 按照此图搭建一组ecs的服务 创建一个ecs cluster 创建一个ecsServiceRole 创建Task Definition 创建elb和 target group 创建 service,里面只有一个task 检查运行情况 把service里面的task 改为4 创建一个ecs cluster 创建secrutiry group my-ecs-sgAws数据库迁移工具简介 越来越多的公司选择把服务迁移到云上,那么数据库的迁移尤其重要,亚马逊提供了数据迁移的工具 sct(schema converstion tool) 和 dms (data migration service)两个工具协作帮助客户从线下数据库导入到线上数据库,source 和 target 的database可以不是一种数据库类型,比如从mysql到oracle,或者mysql 到postgresql 简单介绍一下sct,简单点来说就是数据库schema转换工具,把本地的数据库的schema转换为aws线上目标数据库的schema,然后在线上导入这个schema生成数据库,然后用DMS帮你把数据导出到aws上 把aws mysql RDS 数据库 导出到 aws postgresql RDS 实验的目标就是把mysql数据库迁移到postgresql,由于在aws cloud上做比较方面,所以选择了都在云上来迁移做实验 Down load Aws schema convertion tool create mysql database on aws create database:test and table myclass with 2 column:id name test id name 1 hello 2 kitty create postgresql database on aws Open aws sct我几乎删除了所有的service,但是eni就是不让我删除 关联的eip也不让删除 我去aws社区看了很多帖子最后发现主要原因有两个地方 efs 使用eni nat gatway 使用了eni 根据这两点,我去查找,果然有个natgateway 使用eni,删除掉nat gateway后,eni可以删除,eip可以release了一个ec2 instance 配置多网卡 首先要确定你需要几个公网IP,以2个为例 首先要确定你需要几个网卡,以2个为例 申请两个 elastic ip:IP1 ip2 申请两个eni(network interface):eni1,eni2 创建一个ec2 把ip1 绑定到eni1,elastic ip->选中IP->associate->resource type:network interface -> private ip 自动选择 把ip2 绑定到eni2,此处省略步骤 把eni1绑定到ec2,network interface 页面->选择eni1->attach-> 选择 ec2 instance id 把eni2绑定到ec2,此处省略步骤 在ec2 instance 页面,看到iP里面公网IP只有一个,private ip 有2个 为什么少了一个?用putty connnect 这个两个ip,都是没有问题,ec2 的console不显示而已 [ec2-user@ip-172-31-1-176 ~]$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 172.31.1.176 netmask 255.255.255.0 broadcast 172.31.1.255 inet6 fe80::8a:93ff:fefd:ef5c prefixlen 64 scopeid 0x20<link> ether 02:8a:93:fd:ef:5c txqueuelen 1000 (Ethernet) RX packets 4115218 bytes 1170825027 (1.Aws service catalog 简介 aws service catalog 从字面上看就是服务目录,也就是说一些服务放入一组,进行统一的规划,那里一些可以进行统一的规划呢? 几个关键词 portfolio product constraint 傳統資源創建存在問題 從亞馬遜的blog上盜圖 上圖存在的幾個問題非常明顯 創建了一組資源,資源與資源之間無法互訪 EC2要訪問s3 ,那麼需要管理員授權 管理授權就要破壞兩個原則:service self-sufficient不滿足,最小權利原則(那就要定義允許ec2訪問s3的policy,所有的實例都可以訪問) 如何做到產品內部服務可以互訪,而產品外部的服務無權訪問呢? 從亞馬遜的blog上盜圖 A和B是兩個portfolio ,組內可以互訪,但是A和B之間無法訪問 一個使用場景介紹 從亞馬遜的blog上盜圖 比如產品添加了一個s3-08的一個bucket,如果做到允許EC2_04訪問,而不允許其他產品或者本產品內部其他EC2訪問的呢?這就要用到 service catalog來解決 具體例子請看 (https://aws.amazon.com/blogs/mt/create-a-security-partition-for-your-applications-using-aws-service-catalog-and-aws-lambda/)Aws sts 简介 简单来说就是aws通过sts服务生成临时的credential给用户使用,他们可以设置有效期,自动失效,这也是amazon best practice 里面建议的方式 实验准备 创建 User 创建 Role 创建 s3 作为测试 为User创建sts assumeRole 的访问策略 在EC2上使用Aws cli 创建 历史的credential 访问s3 Create an IAM user https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/users input name: mystsuser access type programmatic access 其他保持默认 Create role for antoher aws account https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/roles 选择:another aws account Account ID: 找到上面的user 的arn,XXX就是ID (arn:aws:iam::XXXX:user/mystsuser) Attach plicy 搜索s3,选择 AmanzonS3ReadOnlyAccess,next reviews and create Role,input role name:sts-s3-read-only 创建完毕后,Update/Modify Trust Relationships replace (this is the arn of the user what you created) with arn:aws:iam::XXXX:user/mystsuser使用Aws System Manager 统一管理 aws resource Aws system Manager 简介 AWS Systems Manager gives you visibility and control of your infrastructure on AWS. Systems Manager provides a unified use:qr interface so you can view operational data from multiple AWS services and allows you to automate operational tasks across your AWS resources Aws system manager AWS 让您能够查看和控制 AWS 上的基础设施。Systems Manager 可以提供一个统一的用户界面,供您查看多种 AWS 服务的运行数据,并在 AWS 资源上自动执行操作任务。 使用场景 比如我有个20台 linux ec2,不管什么类型的,只要安装centyos,那么都要给他安装 ,cloudwatch agent 来对系统的disk和memory进行监控 实验的前置条件 你的系统上必须安装SSM Agent 你的EC2的role 必须具有 AmazonEC2RoleforSSM 的policy attach上去 安装SSM agent Intel (x86_64) 64 位实例: sudo yum install -y https://s3.AWS NAT instance setup 简介 NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 AWS NAT gateway Aws 有專門的nat gateway,並且是HA的,只要創建gateway然後更改一下,subnet的路由就可以了,所以自己搭建一個nat gateway實際並不是aws的範疇,實際是一個linux系統的問題 手動搭建一個nat instance private subnet1/ instance1 / sg1(secrutiry group) / internal IP1 ->local node1 public subnet2/ instance2 / sg2(sercirity group) / internal IP2 /public ip2 -> proxy node2 配置proxy node vi /etc/sysctl.conf net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE 192.168.1.0/24 為本地網絡CIDR EC2 頁面,選中proxy node2 ->Action ->Networking ->Disable source/Desk Check我们为什么需要K8S 我们用最常用的一个例子LAMP(Linux/Apache/Mysql/PHP or Python or perl)搭建一個負載均均衡的多節點的網站,假如不考慮mysql環節,我們只考慮負載均衡和多節點的問題。 1:如果我们在本地数据中心进行产品部署的话,我们需要那些服务 负载均衡 LB 扩容和缩放 auto scaling 高可用 HA,一個節點挂掉,如果有新的節點自動產生take over他的服務 日志如何同步到一個中心? Docker部署或者裸程序 反向代理服務 那么问题来了,几乎所有的服务都需要我们自己部署和搭建,我们的基础设施,完全依赖裸的操作系统,我们要全部搭建,举几个最简单的例子:如何决定部署多少个Docker容器?如何让这些容器的服务负载均衡?每个容器里面的日志如何同步?任何一个docker容器服务挂掉该如何处理? 我们操作系统的优化,硬件和网络高可用性,等等目前这些问题都需要我们在本地数据中心来实现,无论是复杂度还是需要硬件成本和技术都是非常高的。 2:如果在aws云上我们使用服务 LB(health check等配置) autoscaling cloudwatch logs 创建Lauch configuration 创建image 里面包含我们应用程序或者包含docker 日志的同步可以同步到elasticsearch服務 反向代理(使用lb的或者image裏面自己搭建nginx根據需要) 我们发现如果我们使用aws来构建我们的服务的话,这里面有很多成熟的服务我们可以拿来使用,这里面我们需要完成各个服务的配置,如果我们使用alicloud或者azure等各个服务平台的配置都是不一样的,即便我们有devops,我们使用terraform和assible来做devops也需要很多不同的代码,跨平台的移植非常麻煩 3. 使用K8s 是否需要負載均衡?是,k8s service本身就是負載均衡 是否需要考慮需要節點的擴容和縮放?是,K8s pod本身就支持autoscaling擴容和縮放 日志如何同步?可以直接使用K8s的存儲管理,可以不用第三方的服務 是否支持容器?一直都是以容器為基本單位就行部署的 系統的可移植性如何?你的程序無論在本地數據中心的K8S還是在各個云服務平臺的k8s上,devops的代碼的改動幾乎沒有多少,完全是跨平臺的。無論是開發者還是devops都可以聚焦於你的業務實現 6.反向代理,直接使用service ingress 就可以很容易解決 總之,k8S提供了你需要的完美的一體化的解決方案,所有的這些服務都集成在K8S内部,如果使用一些定制化的k8S平臺,比如openshit還集成了更多的開發和devops的工具在裏面,可以更快的開發和測試和部署,讓我們的用戶效率大大提高。Difference between Security Groups and Network Access Control List (NACL) Scope Network ACLs are applicable at the subnet level, so any instance in the subnet with an associated NACL will follow rules of NACL Security groups has to be assigned explicitly to the instance. This means any instances within the subnet group gets the rule applied. State: Stateful or Stateless Security groups are stateful.If you allow an incoming port 80,the outgoing port will be automatically opened Network ACLs are stateless .jenkins 节点 简介 在企业里面使用Jenkins自动部署时,大部分企业更新发布几个软件版本,但是对于一些公司有非常多的业务线或者产品来说,Jenkins就需要同时处理很多的任务,这时候就需要借助Jenkins多个node或者我们所说的Jenkins分布式SLAVE节点,来分开处理多个产品或者业务线的部署,目的就是master节点用来分配任务,slave节点来具体执行部署任务 配置 slave节点 jenkins ->manage jenins -> manage node and cloud ->new node node name:test ,选择permanent node 填好number of executors:1 ,remote root,launch method:launch agent via ssh,Host,Credentials, Host Key Verification Strategy,known hosts file verification strategy ,availability:keep agent online as much as possible 在slave上安装各种需要软件 一定要安装相关的plugin和global tool configuration里面配置相关的工具软件 e 创建一个pipeline测试一下 pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } } post { always { echo 'I will .面试问题结合 为什么要使用Kafka在你们项目 使用什么方式来解决微服务的事务问题Seata 支持多种事物框架 如有大量的并发 HTTP 请求到同一个API如何设计 连接池,keep-alive,socket-timeout,connect-time等设置 如何保证一个高并发的程序能够很好的服务用户,该怎么设计 如何劝说客户迁移到云 K8s能给企业带来什么 如何设计一个websocket客户端的高可用 你为什么觉得你适合这个职位 你对你的职业生涯有什么规划 英文中文的自我介绍 为什么要使用elasticsearch 为什么要使用云服务 mysql索引为什么可以提高速度,elasticsearch倒排索引原理 java 查看jvm一些命令jstack jstat jmap mariadb和mysqldb区别 Solution architect Enterprise architect technical architect 区别 作为一个云架构师你要考哪些stakeholder的诉求 作为一个架构师需要哪些能力 什么是蓝绿发布/灰度发布/滚动发布 RTO RPO aws 混合云网络构建,AWS VPC网络如何通信 aws 私有云在公有云上备份 aws 异地多活.https://aws.amazon.com/cn/blogs/china/corporate-cloud-travel-hybrid-cloud-construction-and-common-cloud-application-scenarios/ 如何设计一个高并发的大数据处理系统,模块解耦,分布式处理,数据的分片和副本,流数据,网络设计和搭建,日志的处理 如果在咨詢行業我們我們處理不同行業客戶的產品的架構,我們怎麽才可以做好這樣的工作安装准备 Centos7.7 vm 或者真实的物理机三台(master一台,node两台) 硬件要求2GB ram,最低2CPU,最少32GB 硬盘 节点之间最好网络互通,如果不考虑安全可以关闭firewalld 可以访问到外部网络,因为需要网络资源,比如yum源和其他k8s需要的yaml文件 需要安装和配置 yum源配置 防火墙selinux的关闭与配置 swap分区配置 桥接ipv4流量交给iptables 文件句柄数的限制 Docker的安装 Kubeadmin,flannel 创建deployment,service,pod,ingress,ingress controller,kubernets-dashboard 具体安装步骤 VM 网络选择bridge模式 master:192.168.25.200 node:192.168.25.187⁄192.168.25.188 防火墙 $ systemctl stop firewalld $ systemctl disable firewalld Selinux $ sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config $ sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config $ setenforce 0 关闭swap swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab 网络转发 cat > /etc/sysctl.d/k8s.conf << EOF net.什么裸金属服务器 裸金属服务器(Bare Metal Server,BMS)是一款兼具弹性云服务器和物理机性能的计算类服务,为您和您的企业提供专属的云上物理服务器,为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能以及数据安全。租户可灵活申请,按需使用。 裸金属服务器的开通是自助完成的,您只需要指定具体的服务器类型、镜像、所需要的网络配置等,即可在短时间内获得所需的裸金属服务器。服务器供应、运维工作交由华为云,您可以专注于业务创新。 产品架构 裸金属服务器在不同可用区中部署(可用区之间通过内网连接),部分可用区发生故障后不会影响同一区域内的其他可用区。 可以通过虚拟私有云建立专属的网络环境,设置子网、安全组,并通过弹性公网IP实现外网链接(需带宽支持)。 通过镜像服务,可以对裸金属服务器安装镜像,也可以通过私有镜像批量创建裸金属服务器,实现快速的业务部署。 通过云硬盘服务实现数据存储,并通过云硬盘备份服务实现数据的备份和恢复。 云监控是保持裸金属服务器可靠性、可用性和性能的重要部分,通过云监控,用户可以观察裸金属服务器资源。 云备份提供对云硬盘和裸金属服务器的备份保护服务,支持基于快照技术的备份服务,并支持利用备份数据恢复服务器和磁盘的数据。 华为裸金属的服务器的架构 与物理机和虚拟机的对比 什么场景下使用裸金属服务器 裸金属服务与一般云服务器最大的区别是是虚拟化与非虚拟化,虚拟化的缺点就是性能损失,操作系统和应用程序在调用硬件资源的时候,没有直接掌控,而是通过虚拟化软件间接管理的。 - 高安全性和法规要求 - 高性能计算场景 - 资源独占的场景 不同厂家的裸金属服务器的服务差别 有很多小厂的裸金属服务器,说实话就是一台独立主机,独立的独享宽带的网络(可以定制宽带),但是网络无法定制,比如没有VPC的选项,没有安全组,要自己通过防火墙软件管安全,也没有网络硬盘,说白了就是一台独立的远程主机。阿里云华为云这些已经非常成熟了,跟网络主机的区别不是太大,区别就是一个非虚拟化的主机而已,其他的地方基本上区别不大。问题描述 我们本地数据中心服务器处理与客户的接口的时候发现网络有严重的延迟,然后我们又有数据合规方面的问题,我们就采用云端的裸金属服务器,安装了docker后发现docker无法访问到主机。 问题发现 docker exec -ti docker-id bash 进入主机 在docker主机内部telnet 主机IP 端口 发现无法访问 退出虚拟主机在主机执行telnet 主机IP 端口 ,是可以访问的 检查网络 原来是docker0 与主机eth0 之间通信问题被firewall屏蔽了 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.1/16" accept" firewall-cmd --reload異常信息 Caused by: java.lang.ExceptionInInitializerError: null at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:122) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:110) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:405) ~[spring-context-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] ... 20 common frames omitted Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1134affc at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) ~[spring-core-5.如何测试linux的tcp和udp端口 测试tcp 一般用使用 telnet telnet 192.168.12.10 22 telnet 不支持udp协议,所以我们可以使用nc,nc可以支持tcp也可以支持udp yum install -y nc nc -z -v 192.168.10.12 22 #tcp nc -z -v -u 192.168.10.12 123 # udpLinux 安装包的痛苦经历 libcurl.so: libssh2.so.1: cannot open shared object file: No such file or directory libssl.so.10: cannot open shared object file: No such file or directory 如果遇到以上以上情况,libcurl需要libssh2依赖,那我们最希望的最法无非是yum install libssh2 libssl希望能安装好,那就解决了依赖的问题了,但是问题是没有 Last metadata expiration check: 2:33:40 ago on 18 Mar 2019 02:09:36 PM CST. No match for argument: libssh2 Error: Unable to find a match: libssh2 遇到这样的问题我们一般会去找一个rpm包去安装,通过rpm -ivh libssh2.rpm 发现缺少依赖 Requires libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcrypto.so.3()(64bit) libcrypto.so.3(OPENSSL_3.0.0)(64bit) libssl.为什么会用到vpn vpn是我们经常会用到的工具,比如有些程序不允许我们在某些地区下载,有些网站我们没有办法看之类的,我们就vpn不管是pptp还是vpn无非改变都是路由问题,也就是你上网的出口的问题 openvpn openvpn是一款开源vpn软件,功能非常强大,用户非常多,遵循的是openvpn协议 缺点搭建有些复杂,但是有第三方的脚本协助搭建会非常简单 openvpn搭建借助于第三方脚本 作者git:https://github.com/Nyr/openvpn-install wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh 最后生成一个*.ovpn文件 下载并安装openvpn gui:https://openvpn.net/community-downloads/ 用安装好的客户端打开*.ovpn就可以登录远程的vpn服务器了Python 面試題目 列表(list)和元组(tuple)有什么区别? 列表是可变的。创建后可以对其进行修改 元组是不可变的。元组一旦创建,就不能对其进行更改 列表表示的是顺序。它们是有序序列,通常是同一类型的对象 [“APPLE”,“PEAR”,“ORANGE”] 元组表示的是结构。可以用来存储不同数据类型的元素 [1,“eric”,1999-08-10,24] 什么是装饰器(decorator) 解释Range函数 解释map函数的工作原理 解释reduce函数的工作原理。 解释filter函数的工作原理 Python是按引用调用还是按值调用? 列表乘法是如何工作的? 类中的“self”指的是什么? 如何在Python中连接列表? 列表和数组有什么区别? list vs array Pandas 举出几个可变和不可变对象的例子 模块(module)和包(package)有什么区别? 在迭代序列时,为什么要使用enumerate? pass、continue和break之间有什么区别? 如何将for循环转换为使用递推式构造列表(list comprehension)? Python中的异常处理是如何进行的? 什么是init?init是Python中的方法或者结构。 什么是lambda函数? Python中的self是什么?self是类的实例或对象。 Python中的函数方法是什么? python中是否需要缩进? python是否区分大小写? Python中的局部变量和全局变量是什么? 什么是python模块?Python中有哪些常用的内置模块? Python中的命名空间是什么? 如何在Python中管理内存?Ansible 简介 ansible是基于Python开发,集合了众多运维工具(puppet、chef)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。最大的特点就是ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。 ## 特点 ## 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作; 默认使用SSH协议对设备进行管理; 有大量常规运维操作模块,可实现日常绝大部分操作; 配置简单、功能强大、扩展性强; 支持API及自定义模块,可通过Python轻松扩展; 通过Playbooks来定制强大的配置、状态管理; 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可; 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。 任务执行方式 ad-hoc模式(点对点模式) 使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。 playbook模式 是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能.比如我们拷贝一个文件到主机,然后授予权限,然后启动程序这几个步骤结合在一起 Aansbile 文件和命令 ansible.cfg inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置 library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以 forks = 5 #并发连接数,默认为5 sudo_user = root #设置默认执行命令的用户 remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全 host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例 timeout = 60 #设置SSH连接的超时时间,单位为秒 log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志) inventory 文件 不分组文件最大打开数 如果服务器提供TCP服务(TCP层或者HTTP层),在并发访问量持续很高时,容易产生too many open files错误。这时查看netstat可以发现很多TIME_WAIT状态的链接,这说明大量链接处于半开状态,已经完成了请求响应,然后进行下一步操作,如果句柄数(文件打开数)超过了阈值,那就只能等待或者出错 解决方案 系统内核的修改 cat /proc/sys/fs/file-max sysctl -a sysctl -p 每个用户级别的修改 ulimit -n 1024000 (临时修改) vim /etc/security/limits.conf * soft nofile 2048 * hard nofile 2048 如果阿里云或者aws云里面的centos都是被优化过的,默认的1024都被修改成了65536了,所以对于大部分人来说足够用了linux tree command Centos 是默认不带tree 命令的,如果要使用首先要install tree command yum install -y tree 使用tree 显示目录的深度为2级 tree -L 2 . ├── easy-rsa-old-2.3.3 │ ├── configure.ac │ ├── COPYING │ ├── COPYRIGHT.GPL │ ├── distro │ ├── doc │ ├── easy-rsa │ └── Makefile.am ├── frgs.log ├── frp_0.32.1_linux_amd64 │ ├── frgs.log │ ├── frpc │ ├── frpc_full.ini │ ├── frpc.ini │ ├── frps │ ├── frps_full.ini │ ├── frps.ini │ ├── frps.pptp 安装 yum install ppp pptp pptp-setup -y 创建 链接文件 /etc/ppp/peers/pptp pty "pptp 039.9966.org --nolaunchpppd --debug" name hk789 password ff800800 remotename PPTP require-mppe-128 require-mschap-v2 refuse-eap refuse-pap refuse-chap refuse-mschap noauth debug persist maxfail 0 defaultroute #replacedefaultroute #usepeerdns 执行命令 modprobe nf_conntrack_pptp pppd call pptp[root@localhost ~]# df -H Filesystem Size Used Avail Use% Mounted on devtmpfs 17G 0 17G 0% /dev tmpfs 17G 0 17G 0% /dev/shm tmpfs 17G 9.1M 17G 1% /run tmpfs 17G 0 17G 0% /sys/fs/cgroup /dev/mapper/centos-root 54G 1.4G 53G 3% / /dev/sda2 1.1G 148M 916M 14% /boot /dev/sda1 210M 12M 198M 6% /boot/efi /dev/mapper/centos-home 12T 35M 12T 1% /home tmpfs 3.4G 0 3.4G 0% /run/user/0 分区不够合理 root 下面空间不够用 umount /home lvreduce -L 5T /dev/mapper/centos-home lvextend -L +5T /dev/mapper/centos-root xfs_growfs /dev/mapper/centos-root mkfs.centos ssh login 免密码登录 修改linux主机sshd配置 vi /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys /sbin/service sshd restart 生成密钥,包括 id_rsa私钥,id_rsa.pub公钥 ssh-keygen -t rsa 更改文件名 mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 拷贝id_rsa文件内容到任何一个linux客户端,remote.pem,使用ssh登录 ssh -i remote.pem user@host相关链接 https://blog.csdn.net/lingbo229/article/details/82586822 https://www.iteye.com/blog/kakaluyi-774227 https://blog.csdn.net/qq_44831907/article/details/113342146 https://www.cnblogs.com/jpfss/p/11050411.html什么是CI和CD CI(Continuous integration,中文意思是持续集成)/ CD(Continuous Delivery, 中文意思持续交付) CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。 CI/CD 的核心概念是持续集成、持续交付和持续部署。它是作为一个面向开发和运营团队的解决方案,主要针对在集成新代码时所引发的问题(也称为:“集成地狱”)。 CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。 jenkins简介 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。可集成使用版本控制工具有SVN、GIT,以及构建工具有Maven、Ant、Gradle。 特点 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持 易于配置-所有配置都是通过其提供的web界面实现; 有大量的插件可以配置使用,比如email通知结果,git,maven 附带了很多其他的功能比如用户密码的加密 可以支持备份,迁移,升级 还可以通过完全编程的方式Jenkinsfile,devops来实现纯代码的方式完全CI/CD 可以支持分布式的多个slave agent 可以保存每次build日志方便查阅 CI/CD 优势 1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量 2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能 3. CI/CD 具有高度的自动化 就是减少人工操作的事务,可以通过预先准备的脚本一次性运行,是我们内部或者外部用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷. 放几张图