• 关于

    中小企业小程序业务建站

    的搜索结果

问题

阿里云社区云计算二期产品发布,免费产品出炉

阿里云社区云计算二期产品发布,免费产品出炉    今年五月,阿里云计算互联网产品 “社区网站云计算”产品,以 phpwind社区软件系统+云服务器+互联网创业服务的模式&...
magiccake 2019-12-01 20:04:14 11525 浏览量 回答数 8

问题

支付宝小程序云训练营优秀学员提问来啦

看书学不够,想要跟着大佬实操!为了满足大家这个愿望,开发者社区特别推出小程序云7天训练营,为大家请到支付宝专家团队,旨在从认识小程序云,到掌握云开发、小程序...
问问小秘 2020-06-15 15:57:38 159 浏览量 回答数 1

回答

楼主您好, 估计这样可以。 阿里云是不允许做非法的流量穿透,但具体到您的描述,因为是企业应用,且成功备案的话,那应该是“合理使用”,而不会被清退了。 没办法呀,现在有的地区宽带用户,默认不分配公网IP地址了,但一些小企事业的应用,如ERP之类的,又需要公网的IP来远程访问。 祝您成功。 ------------------------- 楼主您好,1. 是的,每个ECS一般仅提供五个备案服务号。但如您这里提到的,一般情况下,较少小企业(同一间公司)是需要做五个不同的网站吧?2. 公网IP在哪,就需要找哪家ISP备案喔。这里的例子是阿里云。3. 一般家用宽带上下行是非对称的,仅适合小企业做非关键业务用。如重要的业务,请直接将应用放到阿里云,不必通过阿里云VPN转发。 ------------------------- 回 4楼(app醉猫) 的帖子 您好, 您的应用,一定要求是FreeBSD系统吗? 好象目前阿里云不可以自定义安装操作系统。 如果您确实很喜欢FreeBSD系统,可向官方客服提交工单,咨询一下产品经理,看是否在测试中喔: https://workorder.aliyun.com/ ------------------------- 回 6楼(app醉猫) 的帖子 您好, 理论上,ECS上可以放无数个站点喔。只不过,前提是这些站点所使用的域名是在阿里云备过案的。 ------------------------- 回 8楼(app醉猫) 的帖子 您好, 可能备案的政策,是想加强管理。所以,如果需要备案很多个站点的话,可能要成为小ISP之类的了,提高了建站的门槛。 我有安装一个小程序,测试了一下OSS,但没有实际实用过。 ------------------------- 回 10楼(app醉猫) 的帖子 您好, 如phpwind程序,可能有人发布了可用OSS存储的插件。 如果您的程序,没有类似的支持云存储的插件,可自行根据阿里云的开发文档和例子,写一个。
dongshan8 2019-12-02 02:22:42 0 浏览量 回答数 0

交互式分析 Hologres 新购特惠

Hologres 32核首月888元体验

回答

用户介绍 高校健康打卡项目发起于北京大学软件与微电子学院,是该学院张齐勋老师在疫情期 间编写的一套健康信息采集和报表系统。该系统已在 GitHub 开源,并在 Wuhan2020 社区联合主办的 Hack for Wuhan 黑客松活动中荣获最受观众喜爱奖。在疫情期间,该 项目已在北大软微等全国 30 余个高校院系部署应用,为疫情期间的高校师生健康信息采 集汇总的需求提供了快速高效可定制的一站式解决方案。 业务痛点 由于高校打卡项目涉及高校数据安全,故采用自建方式来运行,而非使用第三方的打 卡软件。该项目使用经典的 LAMP + 小程序技术栈开发,前后端分离,开发者社区中基于 Java、Go 等多语言的后端项目也在开发中。在疫情期间,如果只有 1-2 个开发人员,还 按照传统模式买机器-各种语言应用编译打包-部署应用-搭建监控系统-线上运维挨个去 做,肯定满足不了交付效率,同时线上稳定性也得不到保证。因此,一套低门槛开箱即用, 且能在短时间内快速构建一套稳定的后端系统来支撑这套多语言健康信息采集和报表系统 的正常运行显得尤为重要。另外高校打卡时间段固定,会出现洪峰流量,但能否在应对洪峰 流量的同时最大程度地节省成本,也是当时的挑战之一。 痛点综述:整套系统从 0 到 1 搭建,业务交付效率要求高,但开发人员只有 1-2 个, 且涉及到多语言。潮汐使用计算资源,如果自己保有 IaaS 资源,会出现利用率不高的问 题,且需要考虑如何应对洪峰流量。 解决方案 阿里云 Serverless 应用引擎(简称 SAE)基于 Serverless 架构,帮助 PaaS 层用户免运维 IaaS 和 K8s,按需使用,按量计费。支持镜像 / WAR / JAR 三种方式部 署,低门槛零代码改造实现微服务 / Web / 多语言应用快速上云,同时打通了基础设施产 品 SLB、SLS、NAS 等和微服务周边生态产品,以及 Devops 产品,提供了一站式体 验,是企业上云的最佳选择之一。客户借助 SAE 实现了:  免运维,从 0 到 1 快速交付:基于 SAE,北大打卡项目无需购买和运维 ECS,通 过镜像方式白屏化快速部署了多个多语言应用。且无需自建监控系统,提供了开箱即用 的应用监控能力,极大提升了交付效率。  灵活弹性,节省成本:SAE 支持基于 CPU、Mem 使用率等监控指标自动触发扩缩 容,也支持定时弹性,这种灵活的弹性策略既能轻松应对流量高峰,也真正做到了按需 使用,节省了非打卡时段的闲置成本。  极致体验,提供一站式服务:SAE 在细节层面做的非常到位,可以直接在应用内开启 HTTPS 服务等,并与证书管理系统也有很好的集成。 总体而言,使用 SAE 大幅提升了北大打卡项目从 0 到 1 搭建的交付效率,为该项 目在疫情期间的稳定服务提供了强有力的保障。后续该项目不仅会继续支撑高校打卡,也会 作为开发者学习开源流程和基础开发技能的入门项目之一。Wuhan2020 发起人 Frank 说:“Serverless 应用引擎(SAE)帮助我们和齐勋老师从 0 到 1 快速搭建了一套服 务,帮助项目在较短的时间内就能上线运行,面对学生们的打卡高峰,可以轻松应对,免去 了我们在应用可用性上的维护成本,同时也节省了机器成本。
1358896759097293 2021-03-24 10:04:41 0 浏览量 回答数 0

回答

本文汇总了各类型网站的部署方式,便于您自助搭建网站。 网站类型 部署方式 说明 WordPress 云市场镜像搭建WordPress 使用ROS搭建WordPress 手动搭建WordPress(CentOS 7) 手动搭建WordPress(Windows) WordPress是一款常用的搭建个人博客网站的软件。您可以使用WordPress架设自己的网站,也可以搭建内容管理系统CMS(Content Management System)。 使用镜像或资源编排服务ROS(Resource Orchestration Service)模板部署WordPress解决了空间和程序的问题,降低了建站的门槛,即买即用。ROS通过一个JSON格式的模板文件,创建一组阿里云资源。您也可以手动搭建WordPress。 LNMP 环境 ROS模板部署 镜像部署 手动部署(CentOS6) 手动部署(CentOS7) LNMP分别代表Linux、Nginx、MySQL和PHP。使用镜像和资源编排服务ROS模板可以帮您省时省力地部署LNMP环境。如果您熟悉Linux操作系统,希望满足个性化部署的要求,您也可以选择手动部署。 Java Web环境 镜像部署 Tomcat是开源且免费的Java Web服务器,常用作Web开发工具,可以托管由Servlet、JSP 页面(动态内容)、HTML 页面、JS、Stylesheet、图片(静态内容)组成的Java Web应用程序。 适合新手,利用云市场丰富的JAVA 镜像资源快捷部署环境。 手动部署Java Web环境 如果您熟悉Linux命令,可以在ECS上个性化地部署Java web项目。 插件部署 Alibaba Cloud Toolkit for Eclipse,简称Cloud Toolkit,是一款免费的IDE插件。当您在本地完成应用程序的开发、调试及测试后,即可通过该插件轻松将应用程序部署到ECS实例。 Node.js(CentOS) 手动部署 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用来方便、快速地搭建易于扩展的网络应用。 Node.js使用了一个事件驱动、非阻塞式I/O的模型,轻量又高效,非常适合在分布式设备运行的数据密集型实时应用。Node.js的包管理器npm,是全球最大的开源库生态系统。 Magento电子商务网站 手动部署 Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。 Web环境(Windows) 镜像部署 使用阿里云镜像,您可以在Windows操作系统中一键部署Web环境,包括安装IIS 组件(不包括FTP组件)、PHP环境、重定向Rewrite、MySQL和PHPWind。 ThinkPHP框架 镜像部署 ThinkPHP是一款免费、开源、快速、简单、面向对象的轻量级PHP开发框架,遵循Apache2开源协议,为了敏捷Web应用开发和简化企业应用开发而诞生。 PHPWind论坛 镜像部署 PHPWind是一款采用PHP+MySQL方式运行的开源社区程序,轻架构、高效率、简易开发,能够实现快速搭建并轻松管理社区站点的功能。 GitLab 镜像部署和手动部署 GitLab通过Ruby on Rails,实现自托管的Git项目仓库,可通过Web界面轻松访问公开或者私人项目。 使用AMH搭建PHP环境 镜像和手动部署 AMH是一套通过Web控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统。 Microsoft SharePoint 2016 手动部署 Microsoft SharePoint是Microsoft SharePoint Portal Server的简称。SharePoint Portal Server是一个门户站点,使得企业能够开发出智能的门户站点,该站点能够无缝连接到团队和知识,使人们能够更好地利用业务流程中的相关信息,更有效地开展工作。 Drupal内容管理框架 镜像部署 Drupal是一款采用PHP语言编写的开源内容管理框架(CMF),由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。 如果您熟悉ECS、 Linux系统,刚开始使用ECS实例建站,可以使用镜像快速搭建Drupal环境。 Docker(CentOS7) 手动部署 Docker是一个开源工具,能将一个Web应用封装在一个轻量级、便携且独立的容器里,几乎可以运行在任何服务环境下。 适用于熟悉Linux系统,刚开始使用ECS实例的开发者。 LAMP 环境 手动部署 LAMP指Linux、Apache、MySQL和PHP,是一组常用来搭建动态网站或者服务器的开源软件。它们本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。 常用数据库(Oracle、MySQL和SQL Server) 镜像和手动部署 使用阿里云镜像,您可以方便、快捷地部署Oracle、MySQL、SQL Server等常用数据库。如果您熟悉ECS和数据库,也可以手动部署数据库。 WDlinux Control Panel(WDCP) 镜像部署 WDCP(WDlinux Control Panel)是一套通过Web控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统。 RabbitMQ 手动部署 RabbitMQ是AMQP的一个开源实现,支持:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP、AJAX等多种客户端。 用于在分布式系统中存储转发消息,具有较好的易用性、扩展性和高可用性。 PostgreSQL主从架构 手动部署 阿里云版数据库PostgreSQL具有NoSQL兼容、高效查询、插件化管理、安全稳定的特性。 如果您熟悉ECS、Linux系统、PostgreSQL,可以手动部署PostgreSQL主从架构。 Subversion(SVN)版本控制系统 手动部署 SVN (Subversion)作为一个开源的版本控制系統,能管理随时间改变的数据。 Joomla基础管理平台 镜像部署 Joomla是一套知名的内容管理系统,采用PHP加MySQL的方式开发软件系统。 Ghost博客(CentOS 7) 手动部署 Ghost是一个免费的开源博客平台,使用JavaScript编写,基于Node.js,旨在简化个人博客和在线出版物的在线发布过程。此外,将来随着业务的扩展,您可以利用阿里云强大的产品平台,平滑地横向和纵向扩展服务容量。 Moodle课程管理系统 镜像部署 Moodle是一个开源课程管理系统,采用PHP加MySQL的方式运行软件,遵循GNU公共许可协议。 Moodle平台界面简单精巧,您可以根据需要随时调整界面、增减内容。 FTP站点 手动部署(Windows) 在Windows操作系统下搭建FTP服务器(File Transfer Protocol Server)以提供文件存储和访问服务。 手动部署(Linux) 在ECS实例上安装vsftpd,它是Linux下的一款小巧轻快、安全易用的FTP服务器软件。
1934890530796658 2020-03-25 19:18:47 0 浏览量 回答数 0

问题

云服务器的发展

[font="]第一阶段 [font="]虚拟主机时代 [font="]从互联网诞生至今,大部分站长都是从"[font="]虚拟主机"[font&...
杨经理 2019-12-01 21:43:11 9069 浏览量 回答数 3

问题

词汇表是什么样的?(S-V)

S A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z SASL ...
轩墨 2019-12-01 22:06:08 2530 浏览量 回答数 1

回答

Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的。 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project。如果我们进行微服务化改造,以前很多巨石架构的应用可能就拆成了很多个独立的小应用。那么这么多小应用,你是要建 N 个 project 去维护,还是说按照部门或者组来组织这些项目呢?在 B 站的话,我们之前因为是 Monorepo,现在是按照部门去组织管理代码,就是说在单个 GitLab 的 project 里面是有多个 app 的,每一个 app 就表示一个独立的微服务,它可以独立去交付部署。所以说我们看到下面这张图里面,app 的目录里面是有好多个子目录的,比方说我们的评论服务,会员服务。跟 app 同级的目录有一个叫 pkg,可以存放业务有关的公共库。这是我们的一个组织方式。当然,还有一种方式,你可以按照 GitLab 的 project 去组织,但我觉得这样的话可能相对要创建的 project 会非常多。 如果你按部门组织的话,部门里面有很多 app,app 目录怎么去组织?我们实际上会给每一个 app 取一个全局唯一名称,可以理解为有点像 DNS 那个名称。我们对业务的命名也是一样的,我们基本上是三段式的命名,比如账号业务,它是一个账号业务、服务、子服务的三段命名。三段命名以后,在这个 app 目录里面,你也可以按照这三层来组织。比如我们刚刚说的账号目录,我可能就是 account 目录,然后 VIP,在 VIP 目录下可能会放各种各样的不同角色的微服务,比方说可能有一些是做 job,做定时任务或者流式处理的一些任务,有可能是做对外暴露的 API 的一些服务,这个就是我们关于整个大的 app 的组织的一种形式。 微服务中的 app 服务分类 微服务中单个 app 的服务里又分为几类不同的角色。我们基本上会把 app 分为 interface(BFF)、service、job(补充:还有一个 task,偏向定时执行,job 偏向流式) 和 admin。 Interface 是对外的业务网关服务,因为我们最终是面向终端用户的 API,面向 app,面向 PC 场景的,我们把这个叫成业务网关。因为我们不是统一的网关,我们可能是按照大的业务线去独立分拆的一些子网关,这个的话可以作为一个对外暴露的 HTTP 接口的一个目录去组织它的代码,当然也可能是 gRPC 的(参考 B 站对外的 gRPC Moss 分享)。 Service 这个角色主要是面向对内通信的微服务,它不直接对外。也就是说,业务网关的请求会转发或者是会 call 我们的内部的 service,它们之间的通讯可能是使用自己的 RPC,在 b 站我们主要是使用 gRPC。使用 gRPC 通讯以后,service 它因为不直接对外,service 之间可能也可以相互去 call。 Admin 区别于 service,很多应用除了有面向用户的一些接口,实际上还有面向企业内部的一些运营侧的需求,通常数据权限更高,从安全设计角度需要代码物理层面隔离,避免意外。 第四个是 ecode。我们当时也在内部争论了很久,我们的错误码定义到底是放在哪里?我们目前的做法是,一个应用里面,假设你有多种角色,它们可能会复用一些错误码。所以说我们会把我们的 ecode 给单独抽出来,在这一个应用里面是可以复用的。注意,它只在这一个应用里面复用,它不会去跨服跨目录应用,它是针对业务场景的一个业务错误码的组织。 App 目录组织 我们除了一个应用里面多种角色的这种情况,现在展开讲一下具体到一个 service 里面,它到底是怎么组织的。我们的 app 目录下大概会有 api、cmd、configs、 internal 目录,目录里一般还会放置 README、CHANGELOG、OWNERS。 API 是放置 api 定义以及对应的生成的 client 代码,包含基于 pb 定义(我们使用 PB 作为 DSL 描述 API) 生成的 swagger.json。 而 cmd,就是放 main 函数的。Configs 目录主要是放一些服务所需的配置文件,比方说说我们可能会使用 TOML 或者是使用 YAML 文件。 Internal 的话,它里面有四个子目录,分别是 model、dao、service 和 server。Model 的定位职责就是对我们底层存储的持久化层或者存储层的数据的映射,它是具体的 Go 的一个 struct。我们再看 dao,你实际就是要操作 MySQL 或者 Redis,最终返回的就是这些 model(存储映射)。Service 组织起来比较简单,就是我们通过 dao 里面的各个方法来完成一个完整的业务逻辑。我们还看到有个 server,因为我一个微服务有可能企业内部不一定所有 RPC 都统一,那我们处于过渡阶段,所以 server 里面会有两个小目录,一个是 HTTP 目录,暴露的是 HTTP 接口,还有一个是 gRPC 目录,我们会暴露 gRPC 的协议。所以在 server 里面,两个不同的启动的 server,就是说一个服务和启动两个端口,然后去暴露不同的协议,HTTP 接 RPC,它实际上会先 call 到 service,service 再 call 到 dao,dao 实际上会使用 model 的一些数据定义 struct。但这里面有一个非常重要的就是,因为这个结构体不能够直接返回给我们的 api 做外对外暴露来使用,为什么?因为可能从数据库里面取的敏感字段,当我们实际要返回到 api 的时候,可能要隐藏掉一些字段,在 Java 里面,会抽象的一个叫 DTO 的对象,它只是用来传输用的,同理,在我们 Go 里面,实际也会把这些 model 的一些结构体映射成 api 里面的结构体(基于 PB Message 生成代码后的 struct)。 Rob Pike 当时说过的一句话,a little copying is better than a little dependency,我们就遵循了这个理念。在我们这个目录结构里面,有 internal 目录,我们知道 Go 的目录只允许这个目录里面的人去 import 到它,跨目录的人实际是不能直接引用到它的。所以说,我们看到 service 有一个 model,那我的 job 代码,我做一些定时任务的代码或者是我的网关代码有可能会映射同一个 model,那是不是要把这个 model 放到上一级目录让大家共享?对于这个问题,其实我们当时内部也争论过很久。我们认为,每一个微服务应该只对自己的 model 负责,所以我们宁愿去做一小部分的代码 copy,也不会去为了几个服务之间要共享这一点点代码,去把这个 model 提到和 app 目录级别去共用,因为你一改全错,当然了,你如果是拷贝的话,就是每个地方都要去改,那我们觉得,依赖的问题可能会比拷贝代码相对来说还是要更复杂的。 这个是一个标准的 PB 文件,就是我们内部的一个 demo 的 service。最上面的 package 是 PB 的包名,demo.service.v1,这个包使用的是三段式命名,全局唯一的名称。那这个名称为什么不是用 ID?我见过有些公司对内部做的 CMDB 或者做服务树去管理企业内部微服务的时候,是用了一些名称加上 ID 来搞定唯一性,但是我们知道后面那一串 ID 数字是不容易被传播或者是不容易被记住的,这也是 DNS 出来的一个意义,所以我们用绝对唯一的一个名称来表示这个包的名字,在后面带上这一个 PB 文件的版本号 V1。 我们看第二段定义,它有个 Service Demo 代码,其实就表示了我们这个服务要启动的服务的一个名称,我们看到这个服务名称里面有很多个 RPC 的方法,表示最终这一个应用或者这个 service 要对外暴露这几个 RPC 的方法。这里面有个小细节,我们看一下 SayHello 这个方法,实际它有 option 的一个选项。通过这一个 PB 文件,你既可以描述出你要暴露的是 gRPC 协议,又暴露出 HTTP 的一个接口,这个好处是你只需要一个 PB 文件描述你暴露的所有 api。我们回想一下,我们刚刚目录里面有个 api 目录,实际这里面就是放这一个 PB 文件,描述这一个工程到底返回的接口是什么。不管是 gRPC 还是 HTTP 都是这一个文件。还有一个好处是什么?实际上我们可以在 PB 文件里面加上很多的注释。用 PB 文件的好处是你不需要额外地再去写文档,因为写文档和写服务的定义,它本质上是两个步骤,特别容易不一致,接口改了,文档不同步。我们如果基于这一个 PB 文件,它生成的 service 代码或者调用代码或者是文档都是唯一的。 依赖顺序与 api 维护 就像我刚刚讲到的,model 是一个存储层的结构体的一一映射,dao 处理一些数据读写包,比方说数据库缓存,server 的话就是启动了一些 gRPC 或者 HTTP Server,所以它整个依赖顺序如下:main 函数启动 server,server 会依赖 api 定义好的 PB 文件,定义好这些方法或者是服务名之后,实际上生成代码的时候,比方说 protocbuf 生成代码的时候,它会把抽象 interface 生成好。然后我们看一下 service,它实际上是弱依赖的 api,就是说我的 server 启动以后,要注册一个具体的业务代码的逻辑,映射方法,映射名字,实际上是弱依赖的 api 生成的 interface 的代码,你就可以很方便地启动你的 server,把你具体的 service 的业务逻辑给注入到这个 server,和方法进行一一绑定。最后,dao 和 service 实际上都会依赖这个 model。 因为我们在 PB 里面定义了一些 message,这些 message 生成的 Go 的 struct 和刚刚 model 的 struct 是两个不同的对象,所以说你要去手动 copy 它,把它最终返回。但是为了快捷,你不可能每次手动去写这些代码,因为它要做 mapping,所以我们又把 K8s 里类似 DeepCopy 的两个结构体相互拷贝的工具给抠出来了,方便我们内部 model 和 api 的 message 两个代码相互拷贝的时候,可以少写一些代码,减少一些工作量。 上面讲的就是我们关于工程的一些 layout 实践。简单回溯一下,大概分为几块,第一就是 app 是怎么组织的,app 里面有多种角色的服务是怎么组织的,第三就是一个 app 里面的目录是怎么组织的,最后我重点讲了一下 api 是怎么维护的。 Unittest 测试方法论 现在回顾一下单元测试。我们先看这张图,这张图是我从《Google 软件测试之道》这本书里面抠出来的,它想表达的意思就是最小型的测试不能给我们的最终项目的质量带来最大的信心,它比较容易带来一些优秀的代码质量,良好的异常处理等等。但是对于一个面向用户场景的服务,你只有做大型测试,比方做接口测试,在 App 上验收功能的这种测试,你应用交付的信心可能会更足。这个其实要表达的就是一个“721 原则”。我们就是 70% 写小型测试,可以理解为单元测试,因为它相对来说好写,针对方法级别。20% 是做一些中型测试,可能你要连调几个项目去完成你的 api。剩下 10% 是大型测试,因为它是最终面向用户场景的,你要去使用我们的 App,或者用一些测试 App 去测试它。这个就是测试的一些简单的方法论。 单元测试原则 我们怎么去对待 Go 里面的单元测试?在《Google 软件测试之道》这本书里面,它强调的是对于一个小型测试,一个单元测试,它要有几个特质。它不能依赖外部的一些环境,比如我们公司有测试环境,有持续集成环境,有功能测试环境,你不能依赖这些环境构建自己的单元测试,因为测试环境容易被破坏,它容易有数据的变更,数据容易不一致,你之前构建的案例重跑的话可能就会失败。 我觉得单元测试主要有四点要求。第一,快速,你不能说你跑个单元测试要几分钟。第二,要环境一致,也就是说你跑测试前和跑测试后,它的环境是一致的。第三,你写的所有单元测试的方法可以以任意顺序执行,不应该有先后的依赖,如果有依赖,也是在你测试的这个方法里面,自己去 setup 和 teardown,不应该有 Test Stub 函数存在顺序依赖。第四,基于第三点,你可以做并行的单元测试,假设我写了一百个单元测试,一个个跑肯定特别慢。 doker-compose 最近一段时间,我们演进到基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行 unittest 场景下的容器依赖问题。 首先,你要跑单元测试,你不应该用 VPN 连到公司的环境,好比我在星巴克点杯咖啡也可以写单元测试,也可以跑成功。基于这一点,Docker 实际上是非常好的解决方式。我们也有同学说,其他语言有一些 in-process 的 mock,是不是可以启动 MySQL 的 mock ,然后在 in-process 上跑?可以,但是有一个问题,你每一个语言都要写一个这样的 mock ,而且要写非常多种,因为我们中间件越来越多,MySQL,HBase,Kafka,什么都有,你很难覆盖所有的组件 Mock。这种 mock 或者 in-process 的实现不能完整地代表线上的情况,比方说,你可能 mock 了一个 MySQL,检测到 query 或者 insert ,没问题,但是你实际要跑一个 transaction,要验证一些功能就未必能做得非常完善了。所以基于这个原因,我们当时选择了 docker-compose,可以很好地解决这个问题。 我们对开发人员的要求就是,你本地需要装 Docker,我们开发人员大部分都是用 Mac,相对来说也比较简单,Windows 也能搞定,如果是 Linux 的话就更简单了。本地安装 Docker,本质上的理解就是无侵入式的环境初始化,因为你在容器里面,你拉起一个 MySQL,你自己来初始化数据。在这个容器被销毁以后,它的环境实际上就满足了我们刚刚提的环境一致的问题,因为它相当于被重置了,也可以很方便地快速重置环境,也可以随时随地运行,你不需要依赖任何外部服务,这个外部服务指的是像 MySQL 这种外部服务。当然,如果你的单元测试依赖另外一个 RPC 的 service 的话,PB 的定义会生成一个 interface,你可以把那个 interface 代码给 mock 掉,所以这个也是能做掉的。对于小型测试来说,你不依赖任何外部环境,你也能够快速完成。 另外,docker-compose 是声明式的 API,你可以声明你要用 MySQL,Redis,这个其实就是一个配置文件,非常简单。这个就是我们在单元测试上的一些实践。 我们现在看一下,service 目录里面多了一个 test 目录,我们会在这个里面放 docker-compose 的 YAML 文件来表示这次单元化测试需要初始化哪些资源,你要构建自己的一些测试的数据集。因为是这样的,你是写 dao 层的单元测试的话,可能就需要 database.sql 做一些数据的初始化,如果你是做 service 的单元测试的话,实际你可以把整个 dao 给 mock 掉,我觉得反而还相对简单,所以我们主要针对场景就是在 dao 里面偏持久层的,利用 docker-compose 来解决。 容器的拉起,容器的销毁,这些工作到底谁来做?是开发同学自己去拉起和销毁,还是说你能够把它做成一个 Library,让我们的同学写单元测试的时候比较方便?我倾向的是后者。所以在我们最终写单元测试的时候,你可以很方便地 setup 一个依赖文件,去 setup 你的容器的一些信息,或者把它销毁掉。所以说,你把环境准备好以后,最终可以跑测试代码也非常方便。当然我们也提供了一些命令函,就是 binary 的一些工具,它可以针对各个语言方便地拉起容器和销毁容器,然后再去执行代码,所以我们也提供了一些快捷的方式。 刚刚我也提到了,就是我们对于 service 也好,API 也好,因为依赖下层的 dao 或者依赖下层的 service,你都很方便 mock 掉,这个写单元测试相对简单,这个我不展开讲,你可以使用 GoMock 或者 GoMonkey 实现这个功能。 Toolchain 我们利用多个 docker-compose 来解决 dao 层的单元测试,那对于我刚刚提到的项目的一些规范,单元测试的一些模板,甚至是我写了一些 dao 的一些占位符,或者写了一些 service 代码的一些占位符,你有没有考虑过这种约束有没有人会去遵循?所以我这里要强调一点,工具一定要大于约束和文档,你写了约束,写了文档,那么你最终要通过工具把它落实。所以在我们内部会有一个类似 go tool 的脚手架,叫 Kratos Tool,把我们刚刚说的约定规范都通过这个工具一键初始化。 对于我们内部的工具集,我们大概会分为几块。第一块就是 API 的,就是你写一个 PB 文件,你可以基于这个 PB 文件生成 gRPC,HTTP 的框架代码,你也可以基于这个 PB 文件生成 swagger 的一些 JSON 文件或者是 Markdown 文件。当然了,我们还会生成一些 API,用于 debug 的 client 方便去调试,因为我们知道,gRPC 调试起来相对麻烦一些,你要去写代码。 还有一些工具是针对 project 的,一键生成整个应用的 layout,非常方便。我们还提了 model,就是方便 model 和 DTO,DTO 就是 API 里面定义的 message 的 struct 做 DeepCopy,这个也是一个工具。 对于 cache 的话,我们操作 memcache,操作 Redis 经常会要做什么逻辑?假如我们有一个 cache aside 场景,你读了一个 cache,cache miss 要回原 DB,你要把这个缓存回塞回去,甚至你可能这个回塞缓存想异步化,甚至是你要去读这个 DB 的时候要做归并回源(singleflight),我们把这些东西做成一些工具,让它整个回源到 DB 的逻辑更加简单,就是把这些场景描述出来,然后你通过工具可以一键生成这些代码,所以也是会比较方便。 我们再看最后一个,就是 test 的一些工具。我们会基于项目里面,比方说 dao 或者是 service 定义的 interface 去帮你写好 mock 的代码,我直接在里面填,只要填代码逻辑就行了,所以也会加速我们的生产。 上图是 Kratos 的一个 demo,基本就是支持了一些 command。这里就是一个 kratos new kratos-demo 的一个工程,-d YourPath 把它导到某一个路径去,--proto 顺便把 API 里面的 proto 代码也生成了,所以非常简单,一行就可以很快速启动一个 HTTP 或者 gRPC 服务。 我们知道,一个微服务的框架实际非常重,有很多初始化的方式等等,非常麻烦。所以说,你通过脚手架的方式就会非常方便,工具大于约定和文档这个这个理念就是这么来的。 Configuration 讲完工具以后,最后讲一下配置文件。我为什么单独提一下配置文件?实际它也是工程化的一部分。我们一个线上的业务服务包含三大块,第一,应用程序,第二,配置文件,第三,数据集。配置文件最容易导致线上出 bug,因为你改一行配置,整个行为可能跟 App 想要的行为完全不一样。而且我们的代码的开发交付需要经过哪些流程?需要 commit 代码,需要 review,需要单元测试,需要 CD,需要交付到线上,需要灰度,它的整个流程是非常长的。在一步步的环境里面,你的 bug 需要前置解决,越前置解决,成本越低。因为你的代码的开发流程是这么一个 pipeline,所以 bug 最终流到线上的概率很低,但是配置文件没有经过这么复杂的流程,可能大家发现线上有个问题,决定要改个线上配置,就去配置中心或者配置文件改,然后 push 上线,接着就问题了,这个其实很常见。 从 SRE 的角度来说,导致线上故障的主因就是来自配置变更,所以 SRE 很大的工作是控制变更管理,如果能把变更管理做好,实际上很多问题都不会出现。配置既然在整个应用里面这么重要,那在我们整个框架或者在 Go 的工程化实践里面,我们应该对配置文件做一些什么事情? 我觉得是几个。第一,我们的目标是什么?配置文件不应该太复杂,我见过很多框架,或者是业务的一些框架,它实际功能非常强大,但是它的配置文件超级多。我就发现有个习惯,只要有一个同事写错了这个配置,当我新起一个项目的时候,一定会有人把这个错误的配置拷贝到另外一个系统里面去。然后当发现这个应用出问题的时候,我们一般都会内部说一下,你看看其他同事有没有也配错的,实际这个配错概率非常高。因为你的配置选项越多,复杂性越高,它越容易出错。所以第一个要素就是说,尽量避免复杂的配置文件。配得越多,越容易出错。 第二,实际我们的配置方式也非常多,有些用 JSON,有些用 YAML,有些用 Properties,有些用 INI。那能不能收敛成通用的一种方式呢?无论它是用 Python 的脚本也好,或者是用 JSON 也好,你只要有一种唯一的约定,不需要太多样的配置方式,对我们的运维,对我们的 SRE 同时来说,他跨项目的变更成本会变低。 第三,一定要往简单化去努力。这句话其实包含了几个方面的含义。首先,我们很多配置它到底是必须的还是可选的,如果是可选,配置文件是不是就可以把它踢掉,甚至不要出现?我曾经有一次看到我们 Java 同事的配置 retry 有一个重试默认是零,内部重试是 80 次,直接把 Redis cluster 打故障了,为什么?其实这种事故很低级,所以简单化努力的另外一层含义是指,我们在框架层面,尤其是提供 SDK 或者是提供 framework 的这些同事尽量要做一些防御编程,让这种错配漏配也处于一个可控的范围,比方重试 80 次,你觉得哪个 SDK 会这么做?所以这个是我们要考虑的。但是还有一点要强调的是,我们对于业务开发的同事,我们的配置应该足够的简单,这个简单还包含,如果你的日志基本上都是写在这个目录,你就不要提供这个配置给他,反而不容易出错。但是对于我们内部的一些 infrastructure,它可能需要非常复杂的配置来优化,根据我的场景去做优化,所以它是两种场景,一种是业务场景,足够简单,一种是我要针对我的通用的 infrastructure 去做场景的优化,需要很复杂的配置,所以它是两种场景,所以我们要想清楚你的业务到底是哪一种形态。 还有一个问题就是我们配置文件一定要做好权限的变更和跟踪,因为我们知道上线出问题的时候,我们的第一想法不是查 bug,是先止损,止损先找最近有没有变更。如果发现有变更,一般是先回滚,回滚的时候,我们通常只回滚了应用程序,而忘记回滚了配置。每个公司可能内部的配置中心,或者是配置场景,或者跟我们的二进制的交付上线都不一样,那么这里的理念就是你的应用程序和配置文件一定是同一个版本,或者是某种意义上让他们产生一个版本的映射,比方说你的应用程序 1.0,你的配置文件 2.0,它们之间存在一个强绑定关系,我们在回滚的时候应该是一起回滚的。我们曾经也因为类似的一些不兼容的配置的变更,二进制程序上线,但配置文件忘记回滚,出现过事故,所以这个是要强调的。 另外,配置的变更也要经过 review,如果没问题,应该也是按照 App 发布一样,先灰度,再放量,再全量等等类似的一种方式去推,演进式的这种发布,我们也叫滚动发布,我觉得配置文件也是一样的思路。 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答 原文链接
有只黑白猫 2020-01-09 17:29:54 0 浏览量 回答数 0

回答

Re会打字就会建网站:不限流量,免备案,免费试用。 现在是5G空间了。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。     建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 用的是阿里云美国机房,还是很稳定的。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 找人或公司设计也不太好,如果联系不上对方了,或者是对方公司不做了,那也很麻烦。    ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 咱们论坛效果还不错,支持一下。。。。。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 你可以选择在节假日或晚上(这种时间最能体现真实的服务水准),找客服沟通一下,看咱们客服是否在,服务如何,沟通3-5次后再确定。    ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 一定要找规模大的服务商,小的服务商不稳定;他们只是简单地在租几台服务器就开始卖虚拟主机了,虽然更便宜,但是不稳定,会使您的网站经常无法访问,影响您公司的形象及业务往来。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 如要在百度、GOOGLE等网站搜索到您的网站,有两种方式,一种是收费的广告服务;一种是免费的,即您在各论坛上宣传您的网站,过一段时间百度、GOOGLE这些网站会免费将您的网站收录到他们的数据库中。一般新网站做好后,过15天-3个月会自动被收录到这些大网站的数据库中,这时候就可以搜索到了。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。  关键是网站是否有原创的内容和经常保持更新,原创内容指你自己写的文章、报告等。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 也可以自己搭建模板,所有文字和图片都是可以改的 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   速成网站主要是做展示类网站,简单的商城类网站也是可以的,但功能肯定比不上淘宝,目前付款方式只支持支付宝(即时到账),可实现会员注册登录购买等简单功能,不过一般建议客户在网站上放淘宝店铺的链接,指导客户到淘宝店中购买比较好。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。    国际版不能备案,所以用不了支付宝在线支付,支付宝在线支付(即时到账)要求:必须是企业或有执照的个体户;网站必须备案等,具体请见:支付宝官网介绍。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。         从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。         找人或公司设计也不太好,如果找不到对方了,或者是对方公司不做了,那也很麻烦。         建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。     很多用户都是先沟通很长时间,然后再买的。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 注意:国内主机必须备案成功后才能用您自己的域名访问,网站备案一般需要10个工作日左右;个人网站备案后,不能放企业或产品类的内容。速成网站国际版不需要备案,不受备案限制。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 在备案平台备案时,请直接选择购买收费幕布(需自行支付邮费15元左右)。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 可以申请速成网站国际版做跳转,不需要备案。可通过跳转将您的域名指向到其他网址上,通过电脑和手机访问都可以实现跳转。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   网站内容实时推送至百度搜索,平均仅需2天,即可实现原创内容极速收录!成倍放大SEO效果,更有利于网站推广。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 为什么选择速成网站做网站? 更安全!         从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。         找人或公司设计也不太好,如果找不到对方了,或者是对方公司不做了,那也很麻烦。         建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 咱 在线上,可以 加 一下。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 首年费用是215元,包括:COM域名+速成网站国际版(5G阿里云空间,不需要备案,不限流量,可先试用一下)。续费:229元/年。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 如要在百度、GOOGLE等网站搜索到您的网站,有两种方式,一种是收费的广告服务;一种是免费的,即您在各论坛上宣传您的网站,过一段时间百度、GOOGLE这些网站会免费将您的网站收录到他们的数据库中。一般新网站做好后,过15天-3个月会自动被收录到这些大网站的数据库中,这时候就可以搜索到了。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 云邮箱是基于庞大的服务器集群构建的企业邮箱平台,在全球多个节点部署了多个中转集群,保证邮件在全球收发无阻。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     速成网站国际版不用备案,即可直接使用;速成网站创业版等其他的主机网站必须备案。     速成网站-国际版(5G,不限流量,不需备案):160元/年     速成网站-创业版(5G,不限流量,需备案):165元/年 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 国际版不能备案,所以用不了支付宝在线支付,支付宝在线支付(即时到账)要求:必须是企业或有执照的个体户;网站必须备案等,具体请见:支付宝官网介绍。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。     很多用户都是先沟通很长时间,然后再买的。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   从2016年10月1日起,新购的速成网站(创业版、国际版、百度版)已扩容至20G。2016年10月1日以前购买的不变。价格不变。 -------------------------   从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。 -------------------------     可以改变域名注册商的,可转移到我们公司管理,可以教你一下。    COM 英文域名转入费是55元(包括一年续费)。     ------------------------- 有200多套网站模板可以选择,客户自助建站,不需要开发程序,可视化操作,动动鼠标就可以操作!有新手指导、学习视频,一般看半天就会做自己的网站了。 ------------------------- 你可以选择在节假日或晚上(这种时间最能体现真实的服务水准),找客服沟通一下,看咱们客服是否在,服务如何,沟通3-5次后再确定。     ------------------------- 赚钱三法则:不交费、不购买、不销售。不交费:就是不交任何费用;不购买:就是不买任何产品;不销售:就是不让你直接销售任何产品,所以你不需要进货。       ------------------------- 网站备案太麻烦了,用速成网站国际版不用备案就可以直接访问 -------------------------   网站备案太麻烦了,用速成网站国际版不用备案就可以直接访问 -------------------------     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。    很多用户都是先沟通很长时间,然后再买的。 ------------------------- 建议你免费试用一下,有数百套模板可以选择,如果对模板不满意,还可以自己改模板。    主要功能包括:网页设计管理、商品展示和发布管理、文章管理、投票和调查问卷、会员管理、网站SEO、手机网站、商城功能等,不限流量。   ------------------------- 现在是200多套模板了。。。 ------------------------- 申请域名或主机请注意:这类产品大部分成本是服务。有一些服务商降低了价格,服务也下降了。不是找不到人,就是电话打不通,也没有工作人员在线支持,会很麻烦。一定要先咨询2-3个小时,问清楚了再说。 ------------------------- 这个用的是阿里云的服务器,还 很稳定的。 ------------------------- 现在.COM/NET/CN/COM.CN/NET.CN等域名也需要实名认证了。 -------------------------     速成网站国际版不用备案,即可直接使用;速成网站创业版等其他的主机网站必须备案。创业版比国际版要快一些。创业版用的是国内的服务器,国际版用的是美国的服务器。    速成网站-国际版(5G,阿里云美国服务器,不限流量,不需备案):160元/年    速成网站-创业版(10G,阿里云国内服务器,不限流量,需备案):165元/年 ------------------------- 申请域名或主机网站请注意:这类产品大部分成本是服务。有一些服务商降低了价格,服务也下降了。不是找不到人,就是电话打不通,也没有工作人员在线支持,会很麻烦。一定要先咨询5-7个小时,问清楚了再说。    可以找咱们。现在在线。 ------------------------- 一般先按一般公司提交,等他们要求时再按要求办就行了。 -------------------------    知道问答推广属精准营销,针对性强,事半功倍。例如需要做网站的客户一般会提交做网站相关的问题,很容易成为您的客户。几百个四级以上的老账号轮流推广,效果更好。可以加一下我。 ------------------------- 其他同类产品是1G空间,月流量15G,超过流量就不能访问了 -------------------------   百度知道问答推广属精准营销,针对性强,事半功倍,一条答复可能有几十甚至几百个用户查看,不像竞价排名,点一次钱就没了。例如需要做网站的客户一般会提交做网站相关的问题,答复后,客户通过搜索你的品牌名称或产品名称到你的网站,很容易成为您的客户。咱们有350多个四级以上超过5年的老账号轮流推广,效果更好。可以加一下我。 ------------------------- 这个用的是阿里云的服务器,稳定性和速度还是不错的。。 ------------------------- 找人设计或从网上下载网站程序都不安全,出现漏洞没有人管,所以还是用自助建站系统比较可靠些,由技术部负责网站后台系统的安全和维护,更省心。 ------------------------- 现在是300多套模板了,做一般民示类的网站足够用了。。
今日创业 2019-12-02 01:27:25 0 浏览量 回答数 0

问题

MaxCompute百问集锦(持续更新20171011)

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效...
隐林 2019-12-01 20:19:23 38430 浏览量 回答数 18

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT