构建简单 Web 应用实践

news2024/12/14 18:29:09

本文档指导您使用腾讯云容器服务构建一个简单的 Web 应用。该应用由以下两部分组成:

前端服务:用于处理客户端的查询和写入请求。

数据存储服务:使用 redis。将写入的数据存放到 redis-master,访问 redis-slave 进行读取操作。redis-master 和 redis-slave 通过主从复制来保持数据同步。

该应用是 kubernetes 项目自带的示例,详情请参见 Guestbook App。

前提条件

已 注册腾讯云账户。

已创建集群。如未创建,请参见 创建集群。

操作步骤

创建 redis-master 服务

登录容器服务控制台,选择左侧导航栏中的 集群。

单击需要创建应用的集群 ID,进入集群基本信息页,在工作负载 > Deployment 中单击新建

新建 Deployment 页面,设置工作负载基本信息。主要参数信息如下,其余选项保持默认设置:

工作负载名:本文以 redis-master 为例。

说明

Deployment 参数详情请参考 创建 Deployment。

根据以下提示,设置实例内容器。主要参数信息如下,其余选项保持默认设置:

名称:输入实例内容器名称,本文以 master 为例。

镜像:输入 ccr.ccs.tencentyun.com/library/redis

镜像版本(Tag):输入 latest。

镜像拉取策略:本文以不进行设置使用默认策略为例。

根据以下提示,进行工作负载的访问设置。

Service:勾选“启用”。

服务访问方式:选择“仅在集群内访问”。

端口映射:选择 TCP 协议,并将服务端口和容器端口都设置为6379。其它服务可以通过服务名称 redis-master 以及端口6379访问到 master 容器。

单击创建 Deployment,完成 redis-master 服务的创建。

创建 redis-slave 服务

登录容器服务控制台,选择左侧导航栏中的 集群。

单击需要创建应用的集群 ID,进入集群基本信息页,在工作负载 > Deployment 中单击新建

新建 Deployment 页面,设置工作负载基本信息。主要参数信息如下,其余选项保持默认设置:

工作负载名:要创建的工作负载的名称,本文以 redis-slave 为例。

根据以下提示,设置实例内容器。主要参数信息如下,其余选项保持默认设置:

名称:输入实例内容器名称,本文以 slave 为例。

镜像:输入 ccr.ccs.tencentyun.com/library/gb-redisslave

镜像版本(Tag):输入 latest。

镜像拉取策略:请按需选择,本文以不进行设置使用默认策略为例。

环境变量:输入 GET_HOSTS_FROM = dns

根据以下提示,进行工作负载的访问设置。

Service:勾选“启用”。

服务访问方式:选择“仅在集群内访问”。

端口映射:选择 TCP 协议,并将服务端口和容器端口都设置为6379。其它服务可以通过服务名称 redis-slave 以及端口6379访问到 slave 容器。

单击创建 Deployment,完成 redis-slave 服务的创建。

创建 frontend 服务

登录容器服务控制台,选择左侧导航栏中的 集群。

单击需要创建应用的集群 ID,进入集群基本信息页,在工作负载 > Deployment 中单击新建

新建 Deployment 页面,设置工作负载基本信息。主要参数信息如下,其余选项保持默认设置:

工作负载名:要创建的工作负载的名称,本文以 frontend 为例。

根据以下提示,设置实例内容器。主要参数信息如下,其余选项保持默认设置:

名称:输入实例内容器名称,本文以 frontend 为例。

镜像:输入 ccr.ccs.tencentyun.com/library/gb-frontend

镜像版本(Tag):输入 latest。

镜像拉取策略:请按需选择,本文以不进行设置使用默认策略为例。

环境变量:输入 GET_HOSTS_FROM = dns

根据以下提示,进行工作负载的访问设置。

Service:勾选“启用”。

服务访问方式:选择“公网 LB 访问”。

端口映射:选择 TCP 协议,并将服务端口和容器端口都设置为80。用户通过浏览器访问负载均衡 IP 即可访问到 frontend 容器。

单击创建 Deployment,完成 frontend 服务的创建。

验证 Web 应用

在集群详情页,选择服务与路由 > Service

在 Service 页面,找到访问入口列,复制 frontend 服务的负载均衡 IP。

说明

在创建 redis-master 和 redis-slave 服务时,因设置了仅在集群内访问的访问方式,服务只具备一个内网 IP,且只能在集群内被其它服务访问。

在创建 frontend 服务时,因设置了提供公网访问的访问方式,服务具备负载均衡 IP(即公网 IP)和内网 IP,可在集群内被其它服务访问,也可通过公网访问。

使用浏览器访问 frontend 服务的负载均衡 IP,返回如下图所示页面,即表示可以正常访问 frontend 服务。

在输入框中输入任意的字符串后单击 Submit,发现输入的记录已被保存,并且展示在页面下方。 刷新浏览器页面,重新访问该服务 IP 地址。原输入的数据依然存在,即表示输入的字符串已经保存到 redis 中。

开发实践

以下示例代码是 Guestbook App 的 frontend 服务的完整代码,当 frontend 服务收到一个 HTTP 请求后,会进行判断是否为 set 命令:

如果是 set 命令,则取出参数中的 key 和 value,连接到 redis-master 服务。并将 key 和 value 设置到 redis-master 中。

如果不是 set 命令,则连接到 redis-slave 服务,获取参数 key 对应的 value 值,并返回到客户端进行展示。

<php

error_reporting(E_ALL);

ini_set(‘display_errors’, 1);

require ‘Predis/Autoloader.php’;

PredisAutoloader::register();

if (isset($_GET[‘cmd’]) === true) {

$host = ‘redis-master’;

if (getenv(‘GET_HOSTS_FROM’) == ‘env’) {

$host = getenv(‘REDIS_MASTER_SERVICE_HOST’);

}

header(‘Content-Type: application/json’);

if ($_GET[‘cmd’] == ‘set’) {

$client = new PredisClient([

‘scheme’ => ‘tcp’,

‘host’ => $host,

‘port’ => 6379,

]);

c l i e n t − > s e t ( client->set( client>set(_GET[‘key’], $_GET[‘value’]);

print(‘{“message”: “Updated”}’);

} else {

$host = ‘redis-slave’;

if (getenv(‘GET_HOSTS_FROM’) == ‘env’) {

$host = getenv(‘REDIS_SLAVE_SERVICE_HOST’);

}

$client = new PredisClient([

‘scheme’ => ‘tcp’,

‘host’ => $host,

‘port’ => 6379,

]);

$value = c l i e n t − > g e t ( client->get( client>get(_GET[‘key’]);

print(‘{“data”: "’ . $value . ‘"}’);

}

} else {

phpinfo();

} >

说明事项

当 frontend 服务访问 redis-master 和 redis-slave 服务时,连接服务名和端口。集群自带的 DNS 服务会将服务名解析为对应的服务 IP,并根据服务 IP 进行负载均衡。 例如,redis-slave 服务有三个实例。在访问 redis-slave 服务时,可以直接连接 redis-slave 和端口6379。DNS 会自动将 redis-slave 解析为 redis-slave 的服务 IP(即一个浮动 IP,类似于负载均衡的 IP),并根据 redis-slave 的服务 IP 自动进行负载均衡,将请求发送到某个 redis-slave 服务的实例中。

容器环境变量设置:

使用默认设置(推荐设置):frontend 容器运行时,会读取已设置的 GET_HOSTS_FROM 环境变量值 dns,直接通过服务名来连接。

其他设置:需通过另一个环境变量来获取 redis-master 或者 redis-slave 的域名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EthIf-03】 EthernetInterface软件栈的文件组织结构

上图为《AUTOSAR_SWS_EthernetInterface【v2.2.0 】》给出的EthernetInterface软件栈的文件组织结构,本文主要关注arccore代码中已存在的文件的功能和作用,不知道的小伙伴可以查看🔗EthIf的文件结构中的src和inc目录下的文件有哪些: 1. 文件结构 1.1 EthIf_Cbk.h 头文…

Java基础知识(四) -- 面向对象(上)

1.概述 Java语言是一种面向对象的程序设计语言&#xff0c;而面向对象思想(OOP)是一种程序设计思想&#xff0c;在面向对象思想的指引下&#xff0c;使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物&#xff0c;每种事物都具备自己的属性和行为。 面向对象思…

国内Chrome浏览器下载安装教程,谷歌浏览器最新下载教程

今天主要讲解的是国内Chrome浏览器下载安装教程&#xff0c;谷歌浏览器最新下载教程&#xff0c;包括确认浏览器版本、ChromeDriver 驱动的下载&#xff0c;同理&#xff0c;这个教程同样适用于windows版本的&#xff0c;linux 版本的&#xff0c; mac 版本的。 众所周知&…

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

nVisual 定制化APP打包流程

一、下载打包软件 HBuilder X 下载地址&#xff1a;https://dcloud.io/hbuilderx.html 安装:此软件为绿色软件&#xff0c;解压即可使用。进入目录&#xff0c;双击exe启动。 此软件需要注册&#xff0c;打开时会提供跳转链接&#xff0c;通过邮箱注册账号。 注册成功后&#…

pytest -s执行的路径

pytest -s执行的路径&#xff1a; 直接写pytest -s&#xff0c;表示从当前路径下开始执行全部.py的文件。 执行具体指定文件&#xff1a;pytest -s .\testXdist\test_dandu.py 下面这样执行pytest -s 会报找不到文件或没权限访问&#xff0c; 必须要加上具体文件路径pytest -s…

Bootstrap-HTML(六)Bootstrap按钮

Bootstrap按钮与按钮组 前言一、Bootstrap按钮&#xff08;一&#xff09;、内置按钮样式&#xff08;二&#xff09;、按钮边框设置&#xff08;三&#xff09;、按钮尺寸调整&#xff08;四&#xff09;、块级按钮创建&#xff08;五&#xff09;、活动 / 禁用按钮设置 二、B…

HTMLCSS:3D卡片翻转悬停效果

这段HTML、CSS代码定义了页面的背景、卡片的3D翻转效果、内容的布局和样式&#xff0c;以及伪元素的视觉效果。通过这些样式&#xff0c;可以实现一个在鼠标悬停时翻转显示另一面内容的3D卡片。 演示效果 HTML&CSS <!DOCTYPE html> <html lang"en">…

Apache APISIX快速入门

本文将介绍Apache APISIX&#xff0c;这是一个开源API网关&#xff0c;可以处理速率限制选项&#xff0c;并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…

对象键值对的修改

一&#xff1a;一个对象&#xff0c;过滤掉键对应的值是空数组的键&#xff0c;保留值不是空数组的键值对 const obj {a: [1, 2, 3],b: [],c: [4, 5],d: [],e: [6] };// 过滤掉值为空数组的键值对 const filteredObj Object.fromEntries(Object.entries(obj).filter(([key, v…

【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38564 本年度&#xff0c;国家及地方政府持续发力&#xff0c;推出诸多政策组合拳&#xff0c;全力推动汽车产业向更高质量转型升级&#xff0c;积极鼓励消费升级&#xff0c;并大力推行以旧换新等惠民生、促发展举措。尤为引人注目…

记:排查设备web时慢时快问题,速度提升100%

问题描述 问题1&#xff1a; 发现web登录界面刷新和登录功能都比较卡&#xff0c;开浏览器控制台看了下&#xff0c;让我很惊讶&#xff0c;居然能这么慢&#xff1a; 公司2个局域网内的表现不同&#xff0c;局域网A中的都比较卡&#xff0c;局域网B中的又不存在该现象。 问…

5分钟掌握 Bootstrap:打造高效、优雅的前端页面

在前端开发中&#xff0c;快速构建响应式、精美的页面是非常重要的任务&#xff0c;而 Bootstrap 是一个功能强大的 CSS 框架&#xff0c;可以帮助开发者轻松实现这一目标。本篇博客将通过代码示例和表格为你详细讲解如何快速上手 Bootstrap。 5分钟掌握 Bootstrap&#xff1a;…

Launcher启动流程

Launcher启动流程分2个阶段&#xff1a; AMS systemReady() 会启动一个临时Activity&#xff1a;com.android.settings.FallbackHome&#xff0c;如下流程等到用户解锁成功后&#xff0c;FallbackHome轮询到有可用的RealHome包&#xff0c;会销毁掉自己&#xff0c;AMS发现没有…

苹果据悉与博通合作开发AI芯片,台积电先进制程将再迎大单

12月13日消息&#xff0c;苹果有意投入自研AI芯片&#xff0c;与博通共同开发&#xff0c;以台积电3纳米制程生产&#xff0c;2026年量产。法人看好&#xff0c;苹果自研AI芯片开发完成后&#xff0c;投片力度可期&#xff0c;台积电先进制程将再迎来大单。据了解&#xff0c;苹…

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升&#xff0c;外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统&#xff0c;它无缝整合了餐饮商户资源与广大消费者的…

【老白学 Java】数字格式化

数字格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 很多时候需要对数字或日期进行格式化操作&#xff0c;来达到某些输出效果。Java 的 Formatter 类提供了很多扩展性功能用于字符串的格式化&#xff0c;只要调用 String 静态方法 format() &#xff0c;传入参数…

IIS部署程序https是访问出现403或ERR_HTTP2_PROTOCOL_ERROR

一、说明 在windows server 2016中的IIS程序池里部署一套系统&#xff0c;通过https访问站点&#xff0c;同时考虑到安全问题以及防攻击等行为&#xff0c;就用上了WAF云盾功能&#xff0c;能有效的抵挡部分攻击&#xff0c;加强网站的安全性和健壮性。 应用系统一直能够正常…

丸美更名的科技底色

文丨白念云 在当今全球化与科技飞速发展的时代&#xff0c;化妆品行业正历经深刻变革。合成生物学、基因编辑等前沿技术的崛起&#xff0c;重塑着行业生态&#xff0c;开辟出崭新的市场空间。中国作为全球第二大化妆品消费市场&#xff0c;在消费者对品质生活的强烈渴望以及国家…

基于STM32的火灾烟雾报警器设计开题报告

开题报告 题目&#xff1a;基于STM32的火灾烟雾报警器Proteus仿真设计 一、研究背景与意义 随着现代城市化进程的加快&#xff0c;火灾安全问题日益凸显&#xff0c;火灾的早期预警对于减少人员伤亡和财产损失至关重要。传统的火灾报警系统往往依赖于烟雾或温度的单一检测&a…