Opencat-优秀chatGPT的客户端

下面就是介绍一下,本人撸这个猫的过程。

先展示下用户体验吧。

首先,我已经注册了api key,同时恰好本人又有一个国外主机,那么方案就是用socks协议的代理服务器方式来使用chatGPT。

那么,下一步是选择客户端,由于工具众多,但好用的自然会值得推荐。于是下载了opencat这个app。事实上它要求macos是v13的,所以,还要升级macos。

下一步,在opnecat中配置好key。验证成功后就聊天上问题了。可直接访问chatGPT感觉一样的。

还有个生成图片的功能。

注意,有两个维度的代理需要弄清楚,一个是操作系统级别的设置。一个便是浏览器级别的。

本人测试,两处都要设置,方可顺畅。

这是其它配置。

事实上,浏览器层面使用代理则是用于直接访问chatGPT网站的。此处使用是为了测试IP是否已经科学上网而已。在chrome上可以配备扩展(插件),推荐使用Proxy SwitchyOmega。

有人说可以本地用,但根据测试,如果IP是国内,会发现请求时多数是超时的。这和一些帖子的介绍不相符。本人也未测试opencat的手机版本。

所以,本人一般可以开着代理,反正看国内网页时就插件切换喽。

架构师论文之微服务

目录

摘要

本人所在的单位是致力于为铁路和地铁提供技术服务和解决方案的研究机构。近年来由于地铁建设的不断扩张,线网式的管理日益受到了重视,为网络化运营的前提下,应对不同线路运营公司不同专业和不同的承包厂商,多个维度的应用的快速开发和集成,以及持续的进化的难点。需要设计新的适合场景的架构。在这样的背景下,2020年初某某城市地铁公司联合腾讯作为伙伴,一起派出人员组成了联合工作组,在线网智能运维项目中,推行以微服务为主的架构设计,业主同时提出解耦各专业厂商的应用和降低运维成本的要求。本人有幸加入在工作组中,主要负责了穗腾OS的架构设计和负责轨检专业的微服务集成工作。

联合小组最终开发出来的穗腾OS平台,它依托于腾讯云的paas。功能包括:协助各厂商接入智能运维平台,支撑了微服务的全面落地。此外还包括了地铁运维数据总线和算法/组件市场等子系统。本文着重从微服务的角度展开讨论。

正文

2020年某某城市的地铁线网智能运维平台开始建设。它被赋予线网级的综合监控和协调管理。这就面临着去集成既有的、已建设完且正在运营着的地铁线。以前建设此类平台的做法是依赖业主的铁腕,要建设的平台一般在业主的组织下与一家家的专业厂商谈接口协议,再开发调试,串行的去适配各家的单体应用。最后上线的运行效果且不说,耦合紧,工期长,变数多,后期维护成本高。面对这些待解决的痛点,联合小组提出了微服务为主的建设方案,各专业厂商的微服务需要接入穗腾os平台。在本文中首先介绍一下微服务的技术,再介绍微服务在项目中的用武之地—穗腾OS平台,最后结合实践的经历,阐述一下微服务的设计,服务治理和运维以及开发工具链。

首先,微服务是由Martin fowler最早提出的。它是SOA面向服务组件模型的一种实现,但它与同为分布式的esb企业服务总线不同,在微服务中服务提供者(provider)和服务消费者(consumer)之间并无转换和中间层,是去集中化的。同时服务提供者也可能是其它微服务的消费者。它允许各微服务以各自独立的技术栈开发。要加入智能运维平台的各专业厂商要横向拆分功能,以细粒度的组件方式提供。采用轻量级的协议。穗腾OS支持了HTTP/REST和dubbo等。微服务有小独轻松的特点,小不仅指拆分后的微服务灵活和功能单一,还指微服务的开发团体以小规模为佳,一般厂商团队都在5~7人,他们是特性团队,对微服务有着全生命周期的负责,包括设计开发、测试部署和交付。这和敏捷方法所倡导的理念高度契合。除了对团队规模要求不谋而合外,敏捷方法和微服务的初衷都是快速上线,尽早获得用户的反馈。而相信读者也能看出瀑布式的过程模型也由于自身原因很难实现细粒度单元的快速,流畅的交付。独的特点体现在独立的部署和交付,每个微服务也独立运行在各自的进程空间中。轻是指微服务的API无关性和使用HTTP和REST协议。解决了典型的RPC存在的调用者耦合问题。同时能快速搭建访问资源类的应用服务。REST把资源URL标识且在规范的http协议下设计操作(post、delete、put、get)。最后松是指松耦合,易复用。在穗腾OS运行时,提供了一些厂商级的公共微服务,比如身份认证,数据字典查询等。只要厂商提出调用申请,联合工作组开通其权限,厂商通过token凭证等信息即可使用。不然,如果项目中空调、电源、网检、轨检都自己去开发认证鉴权功能,将是极大的浪费,也不符合软件工程的思想。

穗腾os平台是paas,也就是厂商微服务部署和管理平台,智能运维平台应用的支撑环境。为方便厂商的微服务开发人员上手,本人带领联合小组开发了系列的demo模板工程, Java技术栈和GO语言使用的SDK,都能指导厂商接入穗腾os云生态中。同时作为架构师,我在设计架构时,预见到了当微服务接入的服务越来越多时,对某些核心微服务的调用依赖便达到极限时,可能会出现雪崩效应,如果应用间触发链式反应,受其影响的全线智能运维平台可能都会瘫痪。除了在服务治理的容错上设计外,本人提出用专业的消息中间件来作为基础设施向有场景需求的厂商提供,我们梳理了重要的场景,尤其是聚合根或事件源角色的微服务。也规范了中间件的使用制度。小组最终采用了本人的建议选型了kafka作为中间件布设在车辆段(地面中心)和车载的网络中。从厂商应用的角度设计了角色主题的命名规则,也就是topic。以网检的topic为例,18-wangjian-01的格式。18指线路号,拼音指业务分类,最后为专业厂商的业务通道标识。这样消息的订阅者就可以有的放矢地领取消息了,避免了冲突。专业厂商获取专属于自己的业务范围的消息,这也是安全性的角度考虑。

下面从具体专业厂商的角度来讲解微服务实践。探讨微服务的设计或拆分,微服务的治理,开发工具链和运维。在指导轨检专业集成时,本人借鉴了DDD(domain driven design)中一些设计方法。事实上ddd的提出更早于微服务。它主张以业务领域设计来主导整个开发活动,这对领域模型准确性要求非常高。在此基础上,不同的界限上下文中允许出现重复的实体(事实上实体在不同子域中侧重面不同)。DDD是打通问题分析域和解决域的一种创新。正所谓,德不孤,必有邻。DDD和微服务相结合,就像如虎添翼。把单体程序垂直拆分细粒度单元时,识别子域很重要,每个子域内众多微服务围绕着一个聚合根,并由其对外接口。内部业务单一,内部细粒度单元则是职责单一,借鉴了设计类的单一职责原则SRP。轨检专业分车载机检和人工巡检。前者有人工智能算法配合激光相机的帧图采集,后者人工经验比重高,自动化程度偏低,但两个子域分立后有些重叠的部分。在ddd中一般用两种手段再细分,如果重叠部分是一些操作过程,那么抽取出来变成领域服务,一般领域服务命名是动词开头。另外情况就建模为对象。具体是建成实体对象还是值对象。可以再从数据的唯一性角度分析。在项目中,把里程纠正作为是机检和巡检都依赖的领域服务去实施的。

在子域或者说界限上下文中,有地方也分翻译成限界上下文。总之子域内业务是单一的,细粒度单元中职责是单一的,遵循SRP。如果不是这情况,那么的原因就是未达到细粒度的拆分标准,需要重新审视一下,重新分析过程。

在界限上下文中存在上游和下游微服务如何集成问题,这时ddd的建议是用分层的技巧。可以参考某些资料,理解下何为通用协议层和防腐层。一般上游对下游的接口用up通用的协议来设计,比如以rest对外资源接口。而下游去支撑上游业务流程调用时,要开发出防腐层。ACL的建设手段可以应用门面设计模式,或者设计隔离适配层。acl的设计可大可小,用来适配遗留或外部的系统接口。它的作用既保护好自身领域模型免受侵害,又确保不同域在未来保持分离。本人在指导厂商设计微服务时也给出了其他的参考意见。如下:一,根据io的类型是读密集型还是写密集型来分类拆分。二,消除循环依赖和让核心微服务不受非核心微服务的异常影响。即核心不要依赖非核心微服务。三,根据非功能属性拆分服务,比如复用性、资源一致性、部署升级频率、伸缩性等。项目中,轨检中建设加密狗的业务环节时,由于具体需求当时尚未敲定,于是把变动性最高的环节独立设计成微服务,后期时方案成熟即替即用。对于微服务应用中最核心的环节就是服务的治理问题。它包括服务的注册、负载平衡、配置中心、容错。而容错中又细分有限流、超时、隔离和熔断等特性的。在脱离穗腾os平台的生态前提下,最合适的开发工具链则是spring cloud全家桶。它作为Java语言的解决方案,可选的注册工具有euroka和noca(阿里bb开源的)。注册/配置中还有consule。配置中心可选 spring cloud config。方便在测试环境、类生产环境和真正生产环境集中管理,灵活切换各种配置文件。网关建设应用zuul。Ribbon是一种客户端的负载平衡,他和euroka可以配合使用。在容错方案中spring cloud全家桶中的hystrix结合设置阀值的技巧,能帮助微服务在高并发出现时,在核心微服务上包装断路器暂时中断服务,待高峰过去再自动恢复。断路器是用三种状态,有打开、关闭和半开,专门处理线程耗光时的调用问题。同时,也可以设置阈值来保护微服务不被恶意调用。然而在本项目中,穗腾os平台在支持主流的spring cloud微服务生态时,也支持dubbo的RPC协议。厂商的服务如果是基于spring cloud开发的,那么在部署时需要适应性的维护。包括:从euroka注册方式改造到穗腾os的注册方式。这时需要调整的是 pom.xml文件。同时配置中要禁用hystrix,以便让腾讯的容错特性来接管。这些上线前的技术支持,联合工作组都会派出人员悉心的帮助。当部署交付到穗腾OS平台后,厂商团队也渐渐感受到了微服务结合云的一些利好。比如使用穗腾os封装好的调用链追踪,可以图表化展示微服务的运行情况。因为每次对微服务的请求都记录了日志,随时都可以溯源。同时穗腾os还支持容器和虚拟机/集群两方式的部署。如果用docker容器的,推荐仓库式的运维的特性,让用过git的开发工程师立刻解锁新技能。用docker push/pop命令一键部署和拉取云上的容器。而对于运维工程师,也能轻松激活devops的流水线生态中的方案。

就像操作代码仓库一样, 用docker push/pop命令一键部署到云。这些都是降低了运维的成本,也提高了devops的生产力。

项目最终成功上线,应用于某某城市地铁18和22号线上,解决了地铁业主提出的解耦各厂商应用和降低运维成本的两个问题。同时许多优秀的算法和组件在平台上涌现和沉淀。随着穗腾os2.0的商业化推广,新的架构模式在轨道交通行业方案中占有了一席之地,更多的红利会渐渐回馈开发者,开启双赢模式。同时冷静客观的看待微服务技术,还是仍然存在有待改进的地方。比如调用的响应速度,分布式下的事务和数据一致性的方案较复杂,调用链追踪技术还要有待发展。所以说流行的架构也不是万能的,不能脱离场景而选择架构,希望同僚们理性分析需求场景,更希望大家能共同健全微服务的生态。

架构师论文之软件架构风格

目录

摘要

本文将主要讨论三种经典的软件架构风格,并且三种风格分别对应三个本人所负责的三个项目。首先是微内核风格是本人在开发自动售票机产品时使用。第二种管道过滤器风格是本人在开发架构地铁线网行车信号监察项目时的实践应用经历。最后再介绍一下微服务风格的架构项目,这是在2020年某某城市地铁智能运维项目中的应用。由于本人所在的单位是为铁路和地铁提供技术服务和解决方案的研究机构,故本人所阐述的项目背景也以轨道交通行业为主。软件架构风格发展到当今已经枝繁叶茂了,这极大的扩展了架构师选择架构风格的范围。本文首先宏观上罗列一下架构风格家族的成员和概念,中间详细讨论一下三种结合实践的软件架构风格。最后小结一下软件架构风格的意义。

正文

掌握软件架构风格的相关知识是每个架构师的必修课,即使不能各个风格都经历和擅长,但通过学习达到能识别或者辨析各种架构风格也是相当必要,为日后架构工作时选择准确的风格来匹配业务场景提供帮助。宏观上由于软件风格不断垂直细分,风格与风格是之间关系也略复杂了。下面梳理一下或相似或隶属的关系。在独立构件架构风格中,包括事件架构风格、进程通信风格。在虚拟机风格中包括解释解析器风格、规则系统风格。仓库风格中包括黑板风格、超文本风格、数据库风格。注意要区分这不是数据流风格,因为数据流风格强调的数据处理的过程流环节,它包括了批处理架构风格、管道过滤器风格,稍后会重点讲。还有调用返回风格也是比较常用的,包括了主程序子程序风格、层次结构风格、面向对象风格,其中层次结构风格,又不同于层次架构风格,在后者中分了B/S,C/S和三层c/s。当两层C/S中独立出了服务器后,业务逻辑就不在与表示层耦合了,这样客户端就变成了瘦客户端。这样风格的程序是比较容易移植和方便客户端部署,增加安全性。尤其是能在某些客户端资源有限或者紧张的场景中使用。其它,还有闭环风格,C2风格以及SOA家族的分布式风格。

软件架构风格,是描述了某一特定领域中系统的组织方式和惯用模式,它定义了一个系统家族,包括体系结构定义,一个词汇表和一组约束。词汇表,包括一些构件和连接件类型。而这组约束指出系统是如何将这些构件和连接件组合起来的。反映了领域中众多系统所共有的结构和语义特性。

以微内核风格为例,通常包括微内核、插件和UI界面。仅是从语义上就很容易理解微内核和插件的约束关系。即插件是插在微内核上,当插件脱离微内核构件,微内核可以支撑程序继续工作。就像是热插拔U盘时并不影响电脑的其它工作和其它硬件。在复杂的应用系统场景中,当插件不可用的时候,可能会出现降级服务,但应用不会崩溃。大家都体验过自动售票机,简称tvm。它包括了出售单程票,充值一卡通,找零。现在的一些更先进设备,还有二维码的扫描器,一般几个硬件配合围绕着一个应用服务。但当不能收硬币时可以收纸币,不能收纸币时可以扫二维码,不能售单凭单程票,tvm就降级,降级服务为充值一卡通,打印机坏了就提醒不要发票,询问用户是否可以接受。这些TVM的应用场景很多人都经历过,本人开发tvm机内软件,就需要把各种软硬件模块抽象成插件。而主控,也就是微内核的角色,他掌握着事件循环,就像大脑来管理协调各种器官一样。tvm的界面与主控的是分离的,通过socket协议通信,所以严格来说这是界面分离式的微内核架构。界面(UI)可以把插件的状态显示,当所有的硬件插件不服务,界面(UI)还是可以查询地铁的线路信息。想必这种风格已经给大家很形象的认识了。

接下来介绍数据流风格的子风格–管道过滤器风格。通常每个构件都有输入和输出,数据在各种环节中处理(批处理风格是顺序处理的)。管道过滤器风格的特点是,在输入未处理完时,组件输出就已经产生了,最后呈现结果给外部或输出给其它构件。而这个构件就是过滤器。在此项目中之所以没有选择相似的批处理风格来架构,是因为信号数据是实时的指令流,而非纯后台作业。并且处理步骤之间并没有清晰的分界。所以,为了不延迟信号的连贯渲染,就只能用管道过滤器风格。同时也未使用管道过滤器可以并发的特性。本人在架构线网行车信号监察项目时的业务场景如下:外部信号承包商有一套信号协议,包括20多条指令,其中包括道岔、信号灯,还有轨道状态,还有其他的一些信号设备状态。而同时本公司内部也存在着一套信号协议和成熟的渲染程序。如果改造渲染程序来适配外部的信号协议将是巨大的工作量,并且伴随风险。而为了快速上线和高可靠性的质量属性要求。本人选用了管道过滤器风格实现了架构。即新开发了协议转换组件,它相当于风格中的过滤器角色。软件工作时,原有的分发数据的通信模块会直接调用新开发的组件,完成过滤转换。软件很快就成功的接入了外部行车信号的数据。为了过滤器转换处理效率提升,本人使用了内存管理算法健全和控制内存api强大的c和c++开发。当然开发中对内存管理稍有不慎时也会碰到,内存随着进程时间运行越久,占用越大,在几分钟之内就可以让进程崩溃。

最后在重点讲一下特别火的新晋的软件架构风格-微服务风格。他属于SOA大风格中。在分布式风格中webservice/ESB是与微服务有着些许类似,但ESB是企业服务总线。一个介于服务提供者和消费者之间的环节,虽然解耦了两端的依赖,但同时也是中心化和集中化了。而微服务是面向轻量级的协议,比如HTTP,还有API无关性。服务可以用各种技术栈来建设,微服务提供者本身也可以是另外一个微服务的消费者。微服务解决了典型的RPC存在的调用者耦合问题。微服务的架构风格说明它是更纯粹的分布式。有着小独轻松的特点。每个微服务功能单一职责,细粒度且灵活。独立部署和交付。微服务也是独立运行在各自的进程空间中。本人在某某城市地铁智能运维项目中,组织研发了以微服务风格为主的架构产品。具体的场景是:地铁业主要求在平台上监察各专业设备的状态,比如车载电源、车载空调轨道的损耗。而各厂商的方案不能串行的调试开发适配,业主要求解耦单体程序且降低运维成本。因为任何的软件和服务难免升级,而且不可控,一旦有耦合关系存在,厂商就要牵着业主的鼻子走。此时应用微服务风格就是好的选择,它具有的特点也有了很大的用武之地。各厂商拆分细粒度的微服务组件,自己业务自治,快速部署和方便管理。交付在业主提供的paas上。解耦的附属好处就是复用,很多公用微服务可以被集中管理,比如很多专业都用到了身份认证和数据字典查询。当一步步的健全微服务的生态时,许多组件可以市场化的。优秀的算法会慢慢的涌现。并且以各种红利的方式来回馈开发者。新的风格引出新的架构模式,促进相关领域的深度融合。

小结并回头来看,梳理出来的架构风格思维导图就像一棵硕果累累的树。它是前人的经验总结。前辈栽树,后人来乘凉,使用成果。

项目一旦选定了软件的架构风格,大家就相当于有了一定的抽象上的共识。现在的软件架构风格俨然成为一种沟通的媒介了。当越来越多的人在使用这个“标准语言”时,作为从业者就更加需要在架构风格上努力来学习和积累经验。更重要的是熟练根据需求的场景来合理的、灵活的选择架构风格。用好一个架构风格是需要不断的实践的。在架构风格比较时要注意,有时即便系统组织风格相同,但约束上不同,就是细分的另外的一种架构风格。当项目的成败也并不代表架构风格的盖棺定论。我们需要不断的论证和优化,吸取其他架构风格的优点,屏蔽架构风格的缺点。因为项目是变化的,一种风格与另一种风格可以混合应用,也并不是互斥的。

总结就是一种创新,这是我们秉持的态度。希望更多的架构师能探索和实践并分享。大家一起互相学习,共同进步。

架构师论文之敏捷方法

目录

摘要

敏捷方法是一套关于软件开发的思想方法和工具体系,通过遵循一系列的宣言、价值观和核心原则,并由此演化出来的实践方法和工具,来实现更早的和持续的交付有价值的软件,最终帮助客户最大化投资收益和提高影响力和竞争优势。本人有幸在2017年加入一个践行敏捷方法的项目组,该项目是受某石化的委托开发基于地震数据分析平台来指导石油勘探的项目。需要澄清的是这里所指的地震数据并非自然灾害中的地震,而是通过主动对地放炮。分析后来采集到的地震波数据。项目在零迭代时,就确定使用hadoop来分析hdfs格式的数据,同时应用IBM的RTC来协同完成代码管理和持续构建流水线。敏捷方法在此项目中帮助很大。本人作为高级工程师和敏捷教练的身份带领团队实践了scrum过程管理。文章先会从认知理论入手,再结合项目经历分享心得。

正文

敏捷方法中主要的角色有三类:产品负责人,这是对产品投资收益代表的一类人,通常是甲方, product owner,po。开发团队简称dev。这里说明一下,团队人数应该在5~6人的规模,是以特性团队建立,最好成员中多为全栈工程师。第三类角色就是本人在项目中担当的敏捷教练,简称为sm。敏捷方法区别于其他开发方法有两个关键的判别:第一个就是敏捷是面向人,而非面向过程;第二,敏捷面向事实性、适应性而非预设性。

下面介绍敏捷方法的宣言价值观和部分原则。宣言包括个体和交互高于流程和工具,这是以人为本的体现,强调人与人之间的尊重。在项目中有高工和普通工程师,也有内部和外包等。大家彼此无缝沟通,没有等级的区别,直呼英文名,当工作出现问题时不必汇报上级可直接找到解答者。对于,沟通在一个项目开发过程中的重要作用是不言而喻的。很多人说,项目成功的70%是靠沟通,30%才是靠做任务。第二,敏捷倡导可工作的软件高于详尽的文档。曾几何时,许多项目中,文档在不同的角色中来回变换,改来改去消耗人力和物力,也没有拿出客户满意的结果。可工作的软件成了与客户与沟通的新媒介,及早地暴露风险,好过于项目失败。这一点与微服务的小独轻松的特点有共同之处,通过快速上线来得到用户反馈,降低了风险。客户在看到投资有了实质的反馈,可工作的软件并在迭代中逐渐完善,这是敏捷方法结合原型来改造传统开发方法的关键手段之一。第三点,客户合作高于合同谈判。这一点是体现着客户至上。当客户真正的参与进来,敏捷项目的流产风险才大大降低,负面抱怨慢慢会变成微笑。本人作为敏捷教练,在项目中强调指出:客户必须派驻人员在项目组,按时参加敏捷scrum管控会议。最后在客户理解了敏捷方法的要义后,承诺每周至少有一人常住项目组,确保会议至少有两人参加。一个成功的项目不一定要在合同上咬文嚼字,评审会上面红耳赤,谈判桌上拍案而起,人身攻击。客户也不是主宰的上帝和敌人。斗智斗勇的旧式项目经理也不可取。敏捷中我们不怕检查工作,审核进度。反而怕你作为客户一个月不闻不问,不来项目组。真正优质的客户看完敏捷的理念就立刻茅塞顿开了。紧接着第四点,拥抱变化高于遵循计划。事实上有许多软件按瀑布模型开发或结构化步骤,在开发还没有完成时,软件就已经被淘汰了。因为商界的变化莫测,永远是无法预估的模型。例如:安全软件460宣布永久免费后,一下子瞬间占领了8成的市场,这种例子在互联网圈中举不胜举。变化存在,而开发不响应又何谈为客户投资利益最大化和帮助客户提升竞争优势?在变化出现时,对需求变更做管理是自然必要的,但是不遵循旧计划才是敏捷所倡导的。当需求变化后,大家坐在一起重新审视用户故事,调整后续的迭代和排列product backlog item的优先级,风险共担是解决问题的基础。上面介绍了4个宣言,但注意一下,虽然敏捷倡导宣言左向的价值,但不可忽略右项的重要,流程、文档、合同、计划也是必要的。网上有人发问敏捷要不要写文档的人就走了极端。敏捷还有12条核心原则是对价值观的解释和实践的指导,是敏捷项目得以成功的基石。此处不一一展开原则,举例一下最小工作量原则,原文是:以简洁为本,极力减少不必要的工作量的艺术。它是帮助项目提高效率的指导,以防在开发中画蛇添足的工作浪费项目人员的精力。

敏捷发展到现在有许多流派,他们之间不是明显的分支,而是有共性的。在某石化敏捷项目中借鉴了极限编程XP它其中的tdd。倡导测试先行,每一个开发工程师,都要在提交代码前完成自己的单元测试。虽然编写给这gtest和junit的测试代码会占用开发时间,但每日构建时就能排除低级的错误了。对XP有借鉴的同时也有弃用项。极限编程中提出的结对编程被我主张排除使用,毕竟中国程序员的习惯还是要考虑在内的,否则破坏了团队的氛围有时更为危险。对于scrum的过程管理,在实践时会碰到各种问题,其中有一种较传统的工程师,他不能理解敏捷背后的理念问题,他很机械地执行每日站会,有时无精打采,无话可说,有时又滔滔不绝,超时每人2分钟,他讲4分钟。有一次我们在sprint回顾会议上终于听到了抱怨声音。他认为每日站会是一种监督工作和体罚,怕员工迟到等。这时SM敏捷教练就必须站出来了,于是我开了专题会正面解释。每日站会一般控制在15分钟,每人之所以要回答三个问题:我昨天做了什么,今天要做什么,我需要什么资源。这是在拉平小组内开发情况的信息,信息对称就消除了隐患,及时了解开发速率,就像协调1个车子的4个轮子共同前进。而sprint的评审会,这是将迭代的成果集成,汇总和向客户演示。而sprint的回顾会议更像是对轮子的一种清洁和检修。是要汇总在上一个sprint的过程中出现的制度或团队瓶颈问题,讨论对策和完善规则的。为防止大家对会议多且密有反感,我们在和领导讨论后决定在回顾会议上摆上水果和零食、茶水,这下子让头脑风暴环节的发言率提升了两倍。经过了几次sprint后,大家直接把回顾会议称为了水果会议了。本人作为SM,同时需要考虑到少部分人可能对敏捷知之甚少或没有敏捷团队的经历时,需要慢慢的转变。在实践中,后期加入dev的人员就很难对敏捷的此前细节完全了解。新加入到dev中来,仅简单培训了开发环境就开始干活了。所以,SM要抽时间给他们“补课”。比如,讲解敏捷项目中需求开发中使用3C的标准去采集用户故事,同时用invest来衡量一个好用户故事的标准。在sprint的计划启动会中一般会有两个阶段,第一个阶段解决why。由po来介绍自己排序的pbi,并解释明白哪些是近光灯范围,哪些是远光灯的代办项,所以远光灯暂时并不急于排到下一个sprint的任务中。而第二阶段就需要dev和SM一起研究how。即如何分解任务,如何建立架构模型、算法模型、技术准备等。二阶段时,当对PBI有问题时,可以找来po再解释和协调。在经过了第二阶段后,sprint的计划就会可以输出 sprint待办事件列表了。计划会实现一个由PBI到SBI的分解过程。SBI是sprint backlog item。此时的列表不仅仅是用户故事的分解,还包括许多质量属性(非功能需求的)的或者一些技术工作的任务加入。由于,由于在某石化敏捷项目中开发和交付应用了IBM的RTC协同工具,所以代码管理,定时抽取,每日构建都是自动化的。所以提交sprint的成果并不用占用一条sbi。所以在敏捷方法指导项目开发前需要准备好 devops的工具链,这样能让项目事半功倍。有人把这种技术选型、创建工程、基础设施的准备和自动化部署结合统称为零迭代。有句话说得好,磨刀不误砍柴工。同样在实践时如果估计不出团队的速率,可以牺牲第一次迭代来投石问路,这样为以后准确地制定计划提供了参考。

某石化敏捷项目最终上线受到了客户的好评,帮助了地震数据指导石油勘探方向上许多创新的探索。纵观目前的众多开发方法,能在客户、研发团队和公司管理层之间游刃有余,协调资源到位的方法非敏捷方法不可。在未来也希望更多的项目应用敏捷或借鉴其中优秀的特性,本人仅以个人经历和项目场景为探讨契机,提出观点供大家参考。下面就列出一些文中提到的术语解释。

敏捷开发价值观和原则

敏捷是一套关于软件开发过程的思想,方法和工具体系,通过遵循一系列价值观和核心原则,并借助由此演化出来的实践方法和工具,来实现更早和持续的交付有价值的软件,最终帮助客户最大化投资收益,提高影响力和竞争优势。

—概念
本文以下系转载,原地址:https://blog.csdn.net/anderslu/article/details/57422377

敏捷开发的核心理念:

敏捷开发的核心理念:敏捷开发的核心理念就是以最简单有效的方式快速地达成目标,并在这个过程中及时地响应外界的变化,做出迅速的调整。 敏捷开发的第一条价值观就是“ 以人为本”,强调“ 个体(人)” 及“ 个体” 间的沟通与协作在软件开发过程中的重要性。这个顺序不是偶然而为之的,敏捷开发将重视个体潜能的激发和团队的高效协作作为其所推崇的第一价值观。 敏捷开发的第二条价值观就是“ 目标导向”。同其他众多管理理论和模型一样,敏捷开发认同目标导向是成功的关键,因为没有目标也就无所谓成功。敏捷开发的价值观中清楚地阐明,软件开发的目标是“ 可工作的软件”,而不是面面俱到的文档。而遗憾的是,很多软件项目已经在纷繁的文档之中迷失了自己的目标。 敏捷开发的第三条价值观就是“ 客户为先”。虽然敏捷开发强调的第一价值观是“ 以人为本”,但敏捷宣言的缔造者们并没有忘记客户,相反他们真正的理解客户的需求、懂得如何与客户合作。敏捷价值观里强调的“ 客户为先”即不是简单地把客户当作“ 上帝”、刻板的推崇“ 客户至上”,客户要求什么、我们就做什么;也不是把客户当作“ 谈判桌上的对手” 甚至“ 敌人”,去斗智斗勇。敏捷价值观把客户当成了合作者和伙伴,把自己的使命定位为“ “ 帮助客户取得竞争优势”。 敏捷开发的第四条价值观就是“ 拥抱变化”。人们常说“ 世界上唯一不变的就是变化”,大多数人也相信事实确实如此。而以往很多的软件项目却忽视了这一点,或者更准确地说是他们不愿意“ 正视”。他们总是试图用详尽的计划去预先穷举这些变化,然后又试图通过严格遵循计划来控制变化的发生,而结果往往是被不断涌现的变化击垮。敏捷开发价值观中承认变化是软件开发的一部分、并相信正是客户在不断变化其需求的过程中明晰了其真正的需要。因而敏捷开发欢迎变化、拥抱变化,并可坦然应对变化,正是这些变化为客户和项目带来了价值。 再次梳理可以总结和上面意义相近的左右值比较项:
  • 个体和互动高于流程和工具
  • 工作的软件高于详尽的文档
  • 客户合作高于合同谈判
  • 响应变化高于遵循计划
最后,还应记住敏捷宣言中的最后一句话:“ 尽管右项有其价值,我们更重视左项的价值”—敏捷宣言并未否定或贬损“ 右项” 的价值,在敏捷开发的价值观中承认“ 流程和工具”、“ 详尽的文档”、“ 合同谈判” 以及“ 遵循计划” 的重要性,只是两相比较,“ 更重视左项的价值”。

敏捷开发的十二条原则:

1)我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。 2)欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。 3)经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。 4)业务人员和开发人员必须相互合作,项目中的每一天都不例外。 5)激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。 6)不论团队内外,传递信息效果最好和效率最高的方式是面对面的交谈。 7)可工作的软件是进度的首要度量标准。 8)敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。 9)坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。 10)以简洁为本,它是极力减少不必要工作量的艺术。 11)最好的架构、需求和设计出自组织团队。 12)团队定期地反思如何能提高成效,并依此调整自身的举止表现。
  • 敏捷开发原则是对敏捷价值观的解释和实践,它将敏捷的价值观落实到具体的可操作的原则之上,遵循这十二条原则,是敏捷软件开发项目得以成功的基石。
  • 这十二条原则囊括了软件项目管理的所有基本流程,而且这些流程足够具体,它告诉我们项目管理的第一步就是要明确目标,而软件项目的终极目标就是“ 不断地及早交付有价值的软件使客户满意”;它提示我们软件工程的起始点是需求,而需求的固有特征就是不断变化,敏捷开发过程要响应变化;它强调“ 可工作的软件是进度的首要度量标准”,因而需要以尽可能短的周期“ 经常地交付可工作的软件”;它重视相关干系人的协调(“ 业务人员和开发人员必须相互合作”、“ 责任人、开发人员和用户要能够共同维持其步调稳定延续”),重视激发个人潜能(“ 激发个体的斗志”),要求团队使用最高效的沟通方式(“ 面对面的交谈”);它推崇技术变革所具备的强大能量(“ 坚持不懈地追求技术卓越和良好设计”);它强调精益生产(“ 简洁为本”),要求项目采用自组织团队管理模式,并指出“ 定期总结反思” 是校准团队行为、最终达成目标的有效途径。

docker容器仓库私服建立

本人有一台云服务器182.254.……(公网地址),所以,在上面操练容器仓库,方便以后推送部署产品。使用者用自己的环境替换一下即可用。

工具准备

->安装registry

docker pull registry:2

然后就看到images中存在了。

运行它的命令如下:

docker run -itd -p 5000:5000 –name dlregistry -v /home/home4dk:/var/lib/registry registry:2

注意事项

->修改环境变量

1)修改文件

vim /etc/docker/daemon.json

加入内容

{

“registry-mirrors”: [“https://llpuz83z.mirror.aliyuncs.com”,”https://registry.docker-cn.com”],

“insecure-registries”: [“182.254.……:5000”]

}

2)加环境变量

这会让https变成http来访问推送

export INSECURE_REGISTRY=182.254.……:5000

3)然后再启动docker

systemctl daemon-reload

systemctl restart docker

推送实验

要推送本地要有一个打好tag的镜像才行。

#从自己本地的镜像中选一个相对小的做推送实验品,空间小上传快一点

docker tag docker.io/redis:latest 182.254.……:5000/testredis:7

#上传具体命令

docker push 182.254.……:5000/testredis:7

当推送成功后可以用浏览器看:

http://182.254.……:5000/v2/_catalog

http://182.254.……:5000/v2/testredis/tags/list

同时在与容器映射的文件夹下也看到上传后的序列好的文件(从docker开始都是系统建立的)

ll home4dk/docker/registry/v2/

虚机ubuntu下局网搭建gitlab服务器

部署过程:

  • 坑一:当安装了postfix后,发现需要重新配置成internet,使用命令

sudo apt-get install gitlab-ce

然后就是参考过程:

https://blog.csdn.net/discoverer100/article/details/51814171

  • 坑二:本人禁用了先前安装的nginx,把external_url改成了“http://192.168.23.128:8010”,才顺利OK。否则看到的界面有问题,是CSS等资源不完整的显示。此时虽然能有改密码的界面,但不会成功的。如果是想和即有的nginx配合,请参考:https://jingyan.baidu.com/article/6525d4b1b5d89dac7c2e944a.html
  • 坑三:腾讯云把gitlab做起生意了,如果想在上面搞,域名和证书都要理顺,而且会对外界资源有排斥。

用户数据设计:

以下基于本人环境,不用参考。

root下面有codera,coderb,coderc

codera下面建立一个标准项目:bgsvc4hbw

grp4task1下面指定codera是owner(负责人),由root创建组,再邀请codera

此后,codera又建立了一个仓库flowshow用于研究git工作流。

进阶应用:

管理员密码重置

https://blog.csdn.net/weixin_30687051/article/details/97273880

工作流学习链接:

https://blog.csdn.net/qq_32452623/article/details/78905181?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

小结一下,gitflow的心得:

1)feature都是起止于develop分支(回归develop时使用:git merge –no-ff)

2)hotfixs是起于master,止于同时推给master(打tag且尾号加1)和develop(回归方式cherry-pick)

3)realse是起于develop,和hotfixs永远不发生关系,止于性质与hotfixs相同,但区别tag是前一位版本号加1。同样不使用merge来回归develop

4)对于master外的发布,可以根据环境灵活建立分支,比如一平台一分支。

5)tag一般不会隐式推送到远端,所以,可以只选择大版本来显示手工命令推送。

https://blog.csdn.net/github_27263697/article/details/79563949

备份和迁移

https://blog.csdn.net/qq_40907977/article/details/106756999

华山论剑之编程语言

风云再起

有人的地方,就有江湖,有码农的地方,那里就有编程语言的分争。

二十年前,中国90%的程序员=写C语言的人。编程语言三分天下。
而现在,井喷一般出现了300种编程语言。主流圈子里有一个鄙视链的。科普BSL的意思:具体是无非是看英超的瞧不起看德甲的,看德甲的看不起看意甲的,看意甲的当然受不了看中超的,也许他们都看不起中超。
所以,编程语言中搞与机器语言关系近的就看不起底层的,底层就看不起表示层的,他们也有共同点,那就是看不起用HTML开发的。
有人说“Java天下第一”就有人跳出来“PHP是最好的语言,不接受反驳!”
江湖险恶环生,你看不起kotlin吧,可是全面兼容了java这个靠山,扶摇直上三千里。
Java帝国在Web编程领域受到了PHP, Python, Ruby 持续攻击, 被搞的灰头土脸, 但是帝国的基因和运气实在是好, 竟然又搭上了手机开发和大数据快班车, 成功开辟了新战场。

C语言显然沉寂很久了,它的“徒弟”们在圈里横行霸道。
尤其是C++,python,js,java,php。割据兵器谱,叱诧TIOBE。
注:TIOBE是一种开发语言排行榜,“兵器谱”会定期更新。类似于福布斯一样。武林大会盟主之排位实在是行业的风向标。

高徒列传

如果说自古功夫出少林,那么编程语言出于C。

看过《黑客与画家》想到,如果从绘画角度来论编程语言:
C,是用点线面,黑白灰的造型能力,代表作都是素描或中国画.工具包括铅笔(笔),橡皮(墨),白纸(宣纸),简单吧.
C++,是水彩图,你可以用大小不一的毛笔,和N种颜料的调色板了.
java和c#等后续语言,让这里创作变的多元化了,油画,版画,工艺画,工具则变的有了更多种。
python的话,就打开新时代的艺术创作了,当今天的漫画家和插画家,全面应用数位板,压感笔,配合photoshop,批量引入各种素材资源。

→远去的神话–C++

学完C++的人,很少说自己精通
网友A:“吃完自己收拾的是C++程序员,留在桌子上等别人收拾的是Java程序员。”

越早的语言,对内存的使用越要严格.
举例来说,越往古代,礼法也越多.
平辈,长辈之间说话,称谓和废话很多.
会交际的人,一定说的废话是最多的.因为,交际是起于废话的.
“您吃了”,”天气不错”,”最近工作顺利吗?”
可是,这些话就像是c/C++里的,free,析构函数,*pch_XXX=NULL;或空语句等.
在编译器面前,少了如上的这些”废话”,系统就像严厉的长辈(相当于你的太爷在世),让你吃不了兜着走.
做个”懂礼貌”的程序员,会让你写的代码更安全.

→闲话python

人生苦短,我用python

足见coder对它的喜爱,现在玩点什么高大上的都需要这个“神奇胶水”。这条蟒蛇伏在系统中等着你的招呼。
他已经观察了系统很久,也观察了你很久。你准备好粮食和水(第三方模块的安装),然后,启动它,让他出洞或入地掘金或飞上九宵。python没有复杂的“礼貌”和喜欢挑细节毛病的编译器。
王朔说:

第一个人说的,叫“知识分子”。第二个,第三个,还有不知道隔了多少代隔了多少辈,俗称“八杆子打不着的”,都叫“知道分子”。

中国春秋时期的诸子百家,早已哲学过了,做人做事,出世入世。中国一部分孔子门生,一部分老子影响。自然科学发展到今天,奇点邻近,突破太难。
程序员们,扪心自问,你知道了些什么?用android开发app,用框架开发应用。你知道的是什么,只是一些工具和名词。又有多了解android的底层和框架的内部组织?又或者说,你是否有必要去知道?
软件开发中算法更是,一将功成万古枯。所以,事实上留给你的区域很有限的,可能有人认为我比较消极,但发现比发明越发重要,那么坐上python,让你随时引据经典,前人或者牛人的知识总结打包放在你面前自助pick。

→java帝国

说它不好,会被吐沫淹死。
是造生态的专家,短板很少,简直是无所不能。
排行榜几乎没跌出过前五,大厂喜欢,大牛们天天用。

本人读书时,专业课程的最高分就是java,那时做Web就是用JSP,封装就是EJB。做企业应用方向就J2EE,移动方向J2ME。
而现在你如果列java的应用框架,可以有一大箩筐。
各招聘网站上,铺天盖地的关键字与java有关。

后浪的诞生–golang

不管如何,有一款打破BSL的,把链变成环的那就是golang。
听过新闻说,golang打算用go写编译器,即“排除掉C的代码”也称为自举。而且有很大的进展。
这让C很不舒服,的确有些“欺师灭祖”之嫌。这也是我的原始想法。
golang在见过林林总总的或高级/低级,或强类型/弱类型,或表示层/后台层,或编译的/解释的的语言后出生了,老爹是google,吸引众家之长为了是取代C++。辅佐大臣是docker,以太坊。
任何的新生语言如果没有以下的特征,就没有生命力,甚至相当于直接流产:(不讨论小语种,G=golang)

  • 开源
  • 拥有GC(C的法律允许它的臣民直接操作内存,执行效率极高,但是又对内存分配回收不管不顾,全部扔给子民们去处理。人生苦短,别浪费岁月在回收内存垃圾上了)
  • unicode编码支持(G默认是UTF-8)
  • 一招鲜(如果非要让G突出一点,那么绝对是为“并发”而生)
  • 拥抱互联网以及融入现有的生态(如果互联网的安全是“地气儿”那么G可以接上,君不见,玩云的公司也都玩G)

以上几点G做的相当好,再一起简单吐槽一圈“前浪”吧:
吸收着python语法特性的营养和解释性运行的特技。python说自己性能高,G就笑了!
见过java的繁重JVM和编译器,G就有了GC和不依赖三方的开源编译器,别忘记java的编译器还在oracle的手里。
C++哈,你终于来了,python可以笑你没有语法糖,java可以笑你没有手机和移动互联网,而G不说别的,你听过协程吗?
这时台下面举手的还有一大波儿想举手发言,什么js,php……,enough!今天的发布会就到这里。

→与C互访

简单就是美

为此G不屑于C++的花式包装。让全世界的G代码,看起来都是自己写的。
就目前来讲,调用C的最简单方案绝对是G。这便是C的基因。

原理:https://www.sohu.com/a/306764682_100111840
编译的时候会在PATH中寻找gcc,这也说明G事实上可以嵌入汇编语言

G调用C实战:

→敌我不分还是反朴归真

好吧,骂声之后,冷静下来。另一个维度升起。
近十多年,从未看过在一种“徒弟”语言中那么的尊重C这位“老师”。
所以,PHP,python,java等跳出来攻击G时,是一种狭隘的自我保护。
G才是那个能让师傅荣光焕发的,误解它的原因,可能是他太过出色,光环已然超载了老师。
他更适应这个时代,是未来一段时间内开发语言的“新宠”。

云上git服务器

使用gitosis用户管理

→安装

首先,切换python2来安装
yum install -y python-setuptools 
git clone git://github.com/res0nat0r/gitosis.git 
cd gitosis 
python setup.py install 
然后,修改/user/local/bin/gitosis-三个文件的第一行,python后面加2.7
经过上面的修改,大环境中python版本仍为3.6,而gitosis会自行应用2.7

→环境搭建

本地公钥生成,做为管理的初始公钥
生成公钥命令:ssh-keygen -t rsa
注意生成后把
.pub的结尾,把@后面数字开头或者有_的都去掉,本人直接改成@localhost.
为此,我还去改造了命令提示符,但生成的公钥匙结果依然依赖hostname
https://www.cnblogs.com/xiaofeiIDO/p/8037331.html
并使用

  1. su - gitfarmer
  2. gitosis-init<~/new.pub
上面这条命令2,后台会执行一系列操作,比如生成一个gitosis-admin的仓库,把new.pub中的内容移至仓库的keydir目录中,同时公钥文件名称与仓库中的gitosis.conf里的memebers名一致。 最后,由于公钥匙是gitfarmer用户下生成的,所以,另建立了manage_instance目录,在里面
  1. git clone gitfarmer@127.0.0.1:repositories/gitosis-admin.git
此时,管理已经具备功能而且是在服务端本地来管理,安全分离。

客户端应用

→生成应用者的公钥

https://www.jianshu.com/p/ba6efe6bf60d 一般客户端为window且安装了git bash。下面就是在git bash中生成自己公钥匙的过程。 把id2cvm.pub上传到keydir中,然后,修改gitosis.conf增加你要管理的代码仓库。 然后,git commit. 事实上发现,通过命令行建立的好像并不被git bash接受,最后,还是用了git gui中的工具,生成了默认的id_rsa.pub才有效果。 ssh -Tv gitfarmer@hostname是很好的工具,但有时你发现没有反应这是因为你的服务端并未设置欢迎语录而已,需要看日志中是否22端口已经登录成功。并且要看最后的返回值是否为0来证明测试成功。

→在服务端建立裸仓库来对应客户端

原以为gitosis会代劳这个动作,实践发现需要自己来,有些帖子说的不对。

→客户建立仓库关联,推送代码

本人在git bash中操作系列命令:
mkdir BL_main

cd BL_main

git init

vim readme.md

git add .

git commit -m "first import"

git remote add origin gitfarmer@182.XXX.181.XXX:repositories/BL_YTF_prj.git

git push origin master
最后一条会跳出让你输入服务端登录ssh密码,并且此前在服务端~/respositories/已经建立了相应的裸仓库。

→在客户端多个公钥匙对应多个仓库的管理

在windows下,git bash会找到用户目录下.ssh/config文件来判断,如果你配置了分支,就会根据你请求的@后面值来查找config中的HostName来匹配
$ cat ~/.ssh/config 
HOST mycvm
HostName 182.XXX.181.XXX
User gitfarmerXXX
Port 22
#PreferredAuthentications publickey
IdentityFile C:\Users\user\.ssh\id_rsa

HOST github
HostName github.com
PreferredAuthentications publickey
IdentityFile C:\Users\user\.ssh\id2cvm
上面的mycvm就是你命令中要给出的
ssh -Tv gitfarmer@mycvm
 
如果测试成功,就说明分支判断了,支持多公钥管理

附录

https://blog.csdn.net/harry_haiwei/article/details/77714651 https://www.cnblogs.com/yshyee/p/4288465.html https://www.webyang.net/Html/web/article_257.html 原理指导
把用户gitfarmer加入到sudo组中: https://blog.csdn.net/qq_39290007/article/details/81125750 同一主机多个git ssh公钥配置: https://blog.csdn.net/yigehui12/article/details/89333264

nginx+redis应用服务架构搭建

事实上,两个东东功能独立。nginx作为开源的web服务器,可以用做反向代理等。而redis说白了就是一个内存数据库,存储键值对,可以多节点部署在多个物理机做为应用层,可以集群方式自动管理。可以不用重启,灵活增删节点等。
此处放在一起是因为工作中整理需要。当然,你可以分开阅读或借鉴。
前提:
CentOS6.5 x86_64
一,基础软件:有些并不是必须的补丁。
先用yum install -y XXX,如何需配置本地安装源有本站另外文档介绍。
如果没有yum那必须要有安装光盘的Packages文件夹了,里面是配套的软件包。用rpm -ivh XXX.rpm即可。
gcc的依赖如下:

cloog—–ppl
cpp—–mpfr
g++(gcc-c++)

libstdc++-devel
jdk

使用的openjdk的版本

把起作用的路径先设置成HOME路径,然后加入path。
如,java的默认路径是/etc/alternatives/jre_openjdk
#vi ~/.bash_profile
加入内容:
export JAVA_HOME=/etc/alternatives/jre_openjdk
export JRE_HOME=/etc/alternatives/jre
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
如下两个补丁包可以略,因为,在nginx的安装过程中也必须要源码编译安装。
PCRE
openssl-devel、pcre-devel、zlib-devel
zlib:
./configure
make
make install
ruby

libruby
ruby-libs
—-libreadline()
cd /path/ruby
./configure -prefix=/usr/local/ruby
make
make install
sudo cp ruby /usr/local/bin
事实上,用yum安装的话:yum install ruby,即可了
rubygems:

首先使用yum install rubygems来“投石问路”,就看到它所依赖的包,然后,在Packages目录里把rdoc和另一个包安装好,
最后,去网上下到了rubygems,
rubygems-1.3.7-5.el6.noarch.rpm
解压安装,成功。
没有yum的情况:
cd /path/gem
sudo ruby setup.rb
sudo cp bin/gem /usr/local/bin
gem-redis:

这是ruby和redis之间的桥,此时yum已经插手不上了。
方法一:
gem install redis –version 3.0.7
#由于源的原因,可能下载失败,就手动下载下来安装
#download地址:http://rubygems.org/gems/redis/versions/3.0.7
wget加url
方法二:
下载gem文件,在上面的url里一定会找到。
现场使用语句
gem install -l /root/tool/redis-3.0.7.gem
二,redis安装和运维:
安装集群:
tar -zxvf redis-3.0.7.tar.gz
mv redis-3.0.7 /usr/local/redis3.0.7
cd /usr/local/redis3.0.7
make
make install
cp /usr/local/redis-3.0.7/src/redis-trib.rb /usr/local/bin/
mkdir -p /usr.local/cluster
cp /usr/local/redis-3.0.7/redis.conf /usr.local/cluster
cd /usr.local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
1)启动节点,或说实例,在/usr.local/cluster/
现行配置redis.conf如下:
daemonize yes
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
cd 7000;redis-server /opt/redis/conf/redis.conf > redis-0.log 2>&1 &
cd ../7001;redis-server /opt/redis/conf/redis.conf > redis-1.log 2>&1 &
cd ../7002;redis-server /opt/redis/conf/redis.conf > redis-2.log 2>&1 &
2)构建集群关系
#redis-trib.rb的create子命令构建
#–replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
#节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
—单机情况下:
redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
—双机情况下:
redis-trib.rb create –replicas 1 130.1.2.11:7000 130.1.2.11:7001 130.1.2.11:7002 130.1.2.12:7000 130.1.2.12:7001 130.1.2.12:7002
3)检测集群工作情况
  #redis-trib.rb的check子命令构建
#ip:port可以是集群的任意节点
redis-trib.rb check 1 130.1.2.11:7000
结果是:
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
说明运行正常了。或者redis-cli -c -p,-h 10.0.0.1 -p 后ping/PONG
现场抓图:
技巧:
重改配置时常用语句:
cd ../7002/;rm nodes.conf -f;mv redis.conf redis.conf.v0
三,nginx安装
版本:
在/root/tool/下进行解压和编译安装。
现场最终起作用的语句:
./configure –with-pcre=pcre-8.12 –with-openssl=openssl-1.0.1c –with-zlib=zlib-1.2.8 –with-poll_module –prefix=/home/linux/nginx/nginx-1.9.4/run –with-stream
make;make install
把安装路径加入到path中,export NGINX_HOME,参考上面java安装。即/home/linux/nginx/nginx-1.9.4/run。
配置文档如下:在/home/linux/nginx/nginx-1.9.4/run/conf下面,名为nginx.conf.
删除http节,如果发现已经存在stream节,即把同名的节替换即可。
stream {
    server {
        listen 80;
        proxy_pass app;
    }
    upstream app {
        server 130.1.2.11:4442;
        server 130.1.2.12:4442;
    }
    server {
        listen 81;
        proxy_pass appp;
    }
    upstream appp {
        server 130.1.2.11:6666;
        server 130.1.2.12:6666;
    }
    server {
        listen 82;
        proxy_pass apppp;
    }
    upstream apppp {
        server 130.1.2.11:4433;
        server 130.1.2.12:4433;
    }
}
.nginx的启动
nginx -c /home/linux/nginx/nginx-1.9.4/run/conf/nginx.conf
重启命令 nginx -s reload
关闭
  1.从容停止:kill -QUIT nginx主进程号 (注释:进程号查询方法;ps -ef|grep nginx 看master进程号)
  2.快速停止:kill -TERM nginx主进程号
  3.强制停止:pkill -9 nginx
测试端口是否开放,当然先装好nc工具
nc -z -w 1 127.0.0.1 8883
可以快速开放一个tcp端口,相当于建立一个socket server:
nc -l 8884
用这个命令开放某个端口穿越防火wall
iptables -I INPUT -p tcp –dport 82 -j ACCEPT
iptables -L -n | grep 82
service iptables save
四,业务程序: