做搞基視頻網(wǎng)站/網(wǎng)絡(luò)營銷的案例有哪些
1.微服務(wù)
簡單來說,微服務(wù)架構(gòu)風(fēng)格[1]是一種將一個單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個服務(wù)運行在 自己的進程中,服務(wù)間通信采用輕量級通信機制(通常用HTTP資源API)。這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并 且可通過全自動部署機制獨立部署。這些服務(wù)共用一個最小型的集中式的管理,服務(wù)可用不同的語言開 發(fā),使用不同的數(shù)據(jù)存儲技術(shù)
1.1單體架構(gòu)
優(yōu)點:
1:部署簡單:由于是完整的結(jié)構(gòu)體,可以直接部署在一個服務(wù)器上即可。
2:技術(shù)單一:項目不需要復(fù)雜的技術(shù)棧,往往一套熟悉的技術(shù)棧就可以完成開發(fā)。
缺點:
1:系統(tǒng)啟動慢,一個進程包含了所有的業(yè)務(wù)邏輯,涉及到的啟動模塊過多,導(dǎo)致系統(tǒng)的啟動、重 啟時間周期過長;
2:系統(tǒng)錯誤隔離性差、可用性差,任何一個模塊的錯誤均可能造成整個系統(tǒng)的宕機;
3:可伸縮性差:系統(tǒng)的擴容只能只對這個應(yīng)用進行擴容,無法結(jié)合業(yè)務(wù)模塊的特點進行伸縮。
4: 線上問題修復(fù)周期長:任何一個線上問題修復(fù)需要對整個應(yīng)用系統(tǒng)進行全面升級。
5: 跨語言程度差-
6: 不利于安全管理,所有開發(fā)人員都擁有全量代碼。 項目規(guī)模比較小。
WMS OA辦公系統(tǒng)
1.2微服務(wù)的特點
1:微服務(wù)是一種 項目架構(gòu)思想(風(fēng)格)
2:微服務(wù)架構(gòu)是一系列小服務(wù)的組合(組件化與多服務(wù))
3:任何一個微服務(wù),都是一個獨立的進程(獨立開發(fā)、獨立維護、獨立部署)
4:輕量級通信http協(xié)議(跨語言,跨平臺)
5:服務(wù)粒度(圍繞業(yè)務(wù)功能拆分---模塊拆分【系統(tǒng)管理服務(wù)】【日志服務(wù)】【焦慮測試】【抑郁測試系 統(tǒng)】)
6:去中心化管理(去中心化"地治理技術(shù)、去中心化地管理數(shù)據(jù))
1.3微服務(wù)框架的優(yōu)勢
1.易于開發(fā)和維護 一個微服務(wù)只關(guān)注一個特定的業(yè)務(wù)功能,所以它的業(yè)務(wù)清晰、代碼量較少。開發(fā)和維護單個微服務(wù)相對 比較簡單,整個應(yīng)用是由若干個微服務(wù)構(gòu)建而成,所以整個應(yīng)用也會維持在可控狀態(tài);
⒉.單個微服務(wù)啟動較快 單個微服務(wù)代碼量較少,所以啟動會比較快;
3.局部修改容易部署 單體應(yīng)用只要有修改,就要重新部署整個應(yīng)用,微服務(wù)解決了這樣的問題。一般來說,對某個微服務(wù)進 行修改,只需要重新部署這個服務(wù)即可
4.技術(shù)棧不受限 在微服務(wù)中,我們可以結(jié)合項目業(yè)務(wù)及團隊的特點,合理地選擇技術(shù)棧
5.按需伸縮 焦慮系統(tǒng)訪問量大,只需要對焦慮系統(tǒng)進行擴展
1.4SpringCloud與微服務(wù)關(guān)系
Springcloud為微服務(wù)思想提供了完美的解決方案
Springcloud是一些列框架的集合體(服務(wù)的注冊與發(fā)現(xiàn)【注冊中心】、服務(wù)間遠程調(diào)用、服務(wù)降級、服務(wù)熔斷、服務(wù)限流、分布式事務(wù),網(wǎng)關(guān)等等)
一般我們說springc1oud 其實指的是Springc1oud-netflix,Springcloud并不是造輪子,只是把Netflix公司的組件做二次開發(fā)。
1.6SpringBoot和SpringCloud關(guān)系
SpringBoot專注于快速方便的開發(fā)單個個體微服務(wù)。
SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)、整理、治理的框架,它將SpringBoot開發(fā)的單體整合并管理起來。
SpringBoot可以離開SpringCloud獨立使用開發(fā)項目,但是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><!-- 定義版本號 --><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:他只負責(zé)jar的管理,不負責(zé)jar的下載。子模塊在引用時無需再指定版本號 --><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");//獲取商品的信息===>通過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)中最核心最基本的模塊。用于實現(xiàn)各個微服務(wù)的自動化注冊與發(fā)現(xiàn)。
服務(wù)注冊:在服務(wù)治理框架中,都會構(gòu)建一個*注冊中心*,每個服務(wù)單元向注冊中心登記自己提供服務(wù)的詳細信息。并在注冊中心形成一張服務(wù)的*清單*,服務(wù)注冊中心需要以*心跳30s 90s*的方式去監(jiān)測清單中 的服務(wù)是否可用,如果不可用,需要在服務(wù)清單中剔除不可用的服務(wù)。
服務(wù)發(fā)現(xiàn):服務(wù)調(diào)用方向服務(wù)注冊中心咨詢服務(wù),并獲取*所有服務(wù)*的實例清單,實現(xiàn)對具體服務(wù)實
3.1常見的注冊中心軟件
Zookeeper
zookeeper是一個分布式服務(wù)框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式
應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用
配置項的管理等。
Eureka
Eureka是Springcloud Netflix中的重要組件,主要作用就是做服務(wù)注冊和發(fā)現(xiàn)。但是現(xiàn)在已經(jīng)閉
源 ,停更不停用。
Consul
Consul是基于GO語言開發(fā)的開源工具,主要面向分布式,服務(wù)化的系統(tǒng)提供服務(wù)注冊、服務(wù)發(fā)現(xiàn)
和配置管理的功能。Consul的功能都很實用,其中包括:服務(wù)注冊/發(fā)現(xiàn)、健康檢查、Key/Value
存儲、多數(shù)據(jù)中心和分布式一致性保證等特性。Consul本身只是一個二進制的可執(zhí)行文件,所以
安裝和部署都非常簡單,只需要從官網(wǎng)下載后,在執(zhí)行對應(yīng)的啟動腳本即可。
Nacos (服務(wù)治理 配置中心)
Nacos是一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。它是 Spring
Cloud Alibaba 組件之一,負責(zé)服務(wù)注冊發(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.配置注冊中心的地址和名稱,例如:
#設(shè)置注冊中心的地址 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//可以獲取注冊中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過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.負載均衡
4.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;@Autowired//可以獲取注冊中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過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//可以獲取注冊中心的服務(wù)private DiscoveryClient discoveryClient;@Overridepublic String insert(int num,int pid) {Order order = new Order();order.setNumber(num);order.setUid(1);order.setUsername("guo");//獲取商品的信息===>通過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)用
原來使用restTemplate完成服務(wù)之間的調(diào)用: 它不符合我們的編程習(xí)慣。---在某層需要另一層的對象時,直接通過@Autowire注入,并通過對象調(diào)用其他的方法,傳入相關(guān)的參數(shù)。
4.3.1什么是OpenFeign
OpenFeign是Spring Cloud提供的一個聲明式的偽Http客戶端, 它使得調(diào)用遠程服務(wù)就像調(diào)用本地服務(wù)一樣簡單, 只需要創(chuàng)建一個接口并添加一個注解即可。
Nacos很好的兼容了OpenFeign, OpenFeign負載均衡默認集成了SpringCloudLoadBalance, 所以在Nacos下使用OpenFegin默認就實現(xiàn)了負載均衡的效果。
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ū)動
4.修改代碼