做搞基視頻網(wǎng)站/網(wǎng)絡(luò)營(yíng)銷的案例有哪些
1.微服務(wù)
簡(jiǎn)單來(lái)說(shuō),微服務(wù)架構(gòu)風(fēng)格[1]是一種將一個(gè)單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個(gè)服務(wù)運(yùn)行在 自己的進(jìn)程中,服務(wù)間通信采用輕量級(jí)通信機(jī)制(通常用HTTP資源API)。這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并 且可通過(guò)全自動(dòng)部署機(jī)制獨(dú)立部署。這些服務(wù)共用一個(gè)最小型的集中式的管理,服務(wù)可用不同的語(yǔ)言開 發(fā),使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)
1.1單體架構(gòu)
優(yōu)點(diǎn):
1:部署簡(jiǎn)單:由于是完整的結(jié)構(gòu)體,可以直接部署在一個(gè)服務(wù)器上即可。
2:技術(shù)單一:項(xiàng)目不需要復(fù)雜的技術(shù)棧,往往一套熟悉的技術(shù)棧就可以完成開發(fā)。
缺點(diǎn):
1:系統(tǒng)啟動(dòng)慢,一個(gè)進(jìn)程包含了所有的業(yè)務(wù)邏輯,涉及到的啟動(dòng)模塊過(guò)多,導(dǎo)致系統(tǒng)的啟動(dòng)、重 啟時(shí)間周期過(guò)長(zhǎng);
2:系統(tǒng)錯(cuò)誤隔離性差、可用性差,任何一個(gè)模塊的錯(cuò)誤均可能造成整個(gè)系統(tǒng)的宕機(jī);
3:可伸縮性差:系統(tǒng)的擴(kuò)容只能只對(duì)這個(gè)應(yīng)用進(jìn)行擴(kuò)容,無(wú)法結(jié)合業(yè)務(wù)模塊的特點(diǎn)進(jìn)行伸縮。
4: 線上問(wèn)題修復(fù)周期長(zhǎng):任何一個(gè)線上問(wèn)題修復(fù)需要對(duì)整個(gè)應(yīng)用系統(tǒng)進(jìn)行全面升級(jí)。
5: 跨語(yǔ)言程度差-
6: 不利于安全管理,所有開發(fā)人員都擁有全量代碼。 項(xiàng)目規(guī)模比較小。
WMS OA辦公系統(tǒng)
1.2微服務(wù)的特點(diǎn)
1:微服務(wù)是一種 項(xiàng)目架構(gòu)思想(風(fēng)格)
2:微服務(wù)架構(gòu)是一系列小服務(wù)的組合(組件化與多服務(wù))
3:任何一個(gè)微服務(wù),都是一個(gè)獨(dú)立的進(jìn)程(獨(dú)立開發(fā)、獨(dú)立維護(hù)、獨(dú)立部署)
4:輕量級(jí)通信http協(xié)議(跨語(yǔ)言,跨平臺(tái))
5:服務(wù)粒度(圍繞業(yè)務(wù)功能拆分---模塊拆分【系統(tǒng)管理服務(wù)】【日志服務(wù)】【焦慮測(cè)試】【抑郁測(cè)試系 統(tǒng)】)
6:去中心化管理(去中心化"地治理技術(shù)、去中心化地管理數(shù)據(jù))
1.3微服務(wù)框架的優(yōu)勢(shì)
1.易于開發(fā)和維護(hù) 一個(gè)微服務(wù)只關(guān)注一個(gè)特定的業(yè)務(wù)功能,所以它的業(yè)務(wù)清晰、代碼量較少。開發(fā)和維護(hù)單個(gè)微服務(wù)相對(duì) 比較簡(jiǎn)單,整個(gè)應(yīng)用是由若干個(gè)微服務(wù)構(gòu)建而成,所以整個(gè)應(yīng)用也會(huì)維持在可控狀態(tài);
⒉.單個(gè)微服務(wù)啟動(dòng)較快 單個(gè)微服務(wù)代碼量較少,所以啟動(dòng)會(huì)比較快;
3.局部修改容易部署 單體應(yīng)用只要有修改,就要重新部署整個(gè)應(yīng)用,微服務(wù)解決了這樣的問(wèn)題。一般來(lái)說(shuō),對(duì)某個(gè)微服務(wù)進(jìn) 行修改,只需要重新部署這個(gè)服務(wù)即可
4.技術(shù)棧不受限 在微服務(wù)中,我們可以結(jié)合項(xiàng)目業(yè)務(wù)及團(tuán)隊(duì)的特點(diǎn),合理地選擇技術(shù)棧
5.按需伸縮 焦慮系統(tǒng)訪問(wèn)量大,只需要對(duì)焦慮系統(tǒng)進(jìn)行擴(kuò)展
1.4SpringCloud與微服務(wù)關(guān)系
Springcloud為微服務(wù)思想提供了完美的解決方案
Springcloud是一些列框架的集合體(服務(wù)的注冊(cè)與發(fā)現(xiàn)【注冊(cè)中心】、服務(wù)間遠(yuǎn)程調(diào)用、服務(wù)降級(jí)、服務(wù)熔斷、服務(wù)限流、分布式事務(wù),網(wǎng)關(guān)等等)
一般我們說(shuō)springc1oud 其實(shí)指的是Springc1oud-netflix,Springcloud并不是造輪子,只是把Netflix公司的組件做二次開發(fā)。
1.6SpringBoot和SpringCloud關(guān)系
SpringBoot專注于快速方便的開發(fā)單個(gè)個(gè)體微服務(wù)。
SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)、整理、治理的框架,它將SpringBoot開發(fā)的單體整合并管理起來(lái)。
SpringBoot可以離開SpringCloud獨(dú)立使用開發(fā)項(xiàng)目,但是SpringCloud離不開SpringBoot,屬于依賴關(guān)系。
2.搭建
springboot要3.0.0
1.父模塊的pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ghx</groupId><artifactId>demowei02-parent</artifactId><version>0.0.1-SNAPSHOT</version><name>demowei02-parent</name><description>demowei02-parent</description><modules><module>springcloud-common</module><module>springcloud-product</module><module>springcloud-order</module></modules><!-- 父工程管理的子模塊--><!-- 打包方式--><packaging>pom</packaging><!-- 定義版本號(hào) --><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- springcloud的版本 --><spring-cloud.version>2022.0.0</spring-cloud.version><!-- springcloud阿里巴巴的版本 --><spring-cloud-alibaba.version>2022.0.0.0-RC1</spring-cloud-alibaba.version></properties><!-- dependencyManagement:他只負(fù)責(zé)jar的管理,不負(fù)責(zé)jar的下載。子模塊在引用時(shí)無(wú)需再指定版本號(hào) --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2.1
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** @author :guo* @date :Created in 2025/2/28 15:07* @description:* @version:*/
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderDao orderDao;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過(guò)HTTP協(xié)議調(diào)用其他微服務(wù)。===>自己封裝Http工具===》spring提供RestTemplate 沒有交于spring管理//url: 路徑--服務(wù)提供者的路徑//Class: 返回值類型反射類Product product=restTemplate.getForObject("http://localhost:8001/product/getById?pid="+pid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert = orderDao.insert(order);return insert > 0 ? "下單成功" : "下單失敗";}
}
3.服務(wù)治理
服務(wù)治理是微服務(wù)架構(gòu)中最核心最基本的模塊。用于實(shí)現(xiàn)各個(gè)微服務(wù)的自動(dòng)化注冊(cè)與發(fā)現(xiàn)。
服務(wù)注冊(cè):在服務(wù)治理框架中,都會(huì)構(gòu)建一個(gè)*注冊(cè)中心*,每個(gè)服務(wù)單元向注冊(cè)中心登記自己提供服務(wù)的詳細(xì)信息。并在注冊(cè)中心形成一張服務(wù)的*清單*,服務(wù)注冊(cè)中心需要以*心跳30s 90s*的方式去監(jiān)測(cè)清單中 的服務(wù)是否可用,如果不可用,需要在服務(wù)清單中剔除不可用的服務(wù)。
服務(wù)發(fā)現(xiàn):服務(wù)調(diào)用方向服務(wù)注冊(cè)中心咨詢服務(wù),并獲取*所有服務(wù)*的實(shí)例清單,實(shí)現(xiàn)對(duì)具體服務(wù)實(shí)
3.1常見的注冊(cè)中心軟件
Zookeeper
zookeeper是一個(gè)分布式服務(wù)框架,是Apache Hadoop 的一個(gè)子項(xiàng)目,它主要是用來(lái)解決分布式
應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問(wèn)題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用
配置項(xiàng)的管理等。
Eureka
Eureka是Springcloud Netflix中的重要組件,主要作用就是做服務(wù)注冊(cè)和發(fā)現(xiàn)。但是現(xiàn)在已經(jīng)閉
源 ,停更不停用。
Consul
Consul是基于GO語(yǔ)言開發(fā)的開源工具,主要面向分布式,服務(wù)化的系統(tǒng)提供服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)
和配置管理的功能。Consul的功能都很實(shí)用,其中包括:服務(wù)注冊(cè)/發(fā)現(xiàn)、健康檢查、Key/Value
存儲(chǔ)、多數(shù)據(jù)中心和分布式一致性保證等特性。Consul本身只是一個(gè)二進(jìn)制的可執(zhí)行文件,所以
安裝和部署都非常簡(jiǎn)單,只需要從官網(wǎng)下載后,在執(zhí)行對(duì)應(yīng)的啟動(dòng)腳本即可。
Nacos (服務(wù)治理 配置中心)
Nacos是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。它是 Spring
Cloud Alibaba 組件之一,負(fù)責(zé)服務(wù)注冊(cè)發(fā)現(xiàn)和服務(wù)配置. [服務(wù)治理的作用和微服務(wù)配置管理]
3.2nacos服務(wù)治理
1.引入依賴
<!-- nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2.配置注冊(cè)中心的地址和名稱,例如:
#設(shè)置注冊(cè)中心的地址 spring.cloud.nacos.server-addr=localhost:8848 spring.application.name=springcloud-product
3.獲取
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderDao orderDao;@Autowired//可以獲取注冊(cè)中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過(guò)HTTP協(xié)議調(diào)用其他微服務(wù)。===>自己封裝Http工具===》spring提供RestTemplate 沒有交于spring管理//url: 路徑--服務(wù)提供者的路徑//Class: 返回值類型反射類List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-product");ServiceInstance serviceInstance = instances.get(0);String path = serviceInstance.getUri().toString();
// Product product=restTemplate.getForObject("http://localhost:8001/product/getById?pid="+pid, Product.class);Product product=restTemplate.getForObject(path+"/product/getById?pid="+pid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert = orderDao.insert(order);return insert > 0 ? "下單成功" : "下單失敗";}
}
4.負(fù)載均衡
4.1手動(dòng)寫
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** @author :guo* @date :Created in 2025/2/28 15:07* @description:* @version:*/
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderDao orderDao;@Autowired//可以獲取注冊(cè)中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過(guò)HTTP協(xié)議調(diào)用其他微服務(wù)。===>自己封裝Http工具===》spring提供RestTemplate 沒有交于spring管理//url: 路徑--服務(wù)提供者的路徑//Class: 返回值類型反射類List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-product");int index = new Random().nextInt(instances.size());ServiceInstance serviceInstance = instances.get(index);String path = serviceInstance.getUri().toString();order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert = orderDao.insert(order);return insert > 0 ? "下單成功" : "下單失敗";}
}
4.2使用springcloud LoadBalancer
1.添加依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
2.在RestTemplate類上使用@LoadBalanced
3.修改代碼
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** @author :guo* @date :Created in 2025/2/28 15:07* @description:* @version:*/
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderDao orderDao;@Autowired//可以獲取注冊(cè)中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過(guò)HTTP協(xié)議調(diào)用其他微服務(wù)。===>自己封裝Http工具===》spring提供RestTemplate 沒有交于spring管理//url: 路徑--服務(wù)提供者的路徑//Class: 返回值類型反射類List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-product");int index = new Random().nextInt(instances.size());ServiceInstance serviceInstance = instances.get(index);String path = serviceInstance.getUri().toString();Product product=restTemplate.getForObject("http://springcloud-product/product/getById?pid="+pid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert = orderDao.insert(order);return insert > 0 ? "下單成功" : "下單失敗";}
}
4.3使用openfeign完成服務(wù)調(diào)用
原來(lái)使用restTemplate完成服務(wù)之間的調(diào)用: 它不符合我們的編程習(xí)慣。---在某層需要另一層的對(duì)象時(shí),直接通過(guò)@Autowire注入,并通過(guò)對(duì)象調(diào)用其他的方法,傳入相關(guān)的參數(shù)。
4.3.1什么是OpenFeign
OpenFeign是Spring Cloud提供的一個(gè)聲明式的偽Http客戶端, 它使得調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地服務(wù)一樣簡(jiǎn)單, 只需要?jiǎng)?chuàng)建一個(gè)接口并添加一個(gè)注解即可。
Nacos很好的兼容了OpenFeign, OpenFeign負(fù)載均衡默認(rèn)集成了SpringCloudLoadBalance, 所以在Nacos下使用OpenFegin默認(rèn)就實(shí)現(xiàn)了負(fù)載均衡的效果。
4.3.2使用
1.引入依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.創(chuàng)建openfeign接口
package com.ghx.order.feig;import com.ghx.common.entity.Product; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam;/*** @author :guo* @date :Created in 2025/3/3 11:34* @description:* @version:*/ @FeignClient(value = "springcloud-product") public interface ProducFeign {@GetMapping("/product/getById")public Product getById(@RequestParam Integer pid); }
3.開啟openfeign注解驅(qū)動(dòng)
4.修改代碼