作为 一家公司的cto 设计一款最小化的电商
首先要考虑的一点是
1.需求开发
2.业务逻辑
3.系统架构
4.核心系统
讨论你此时的电商项目是b2b 还是b2c
1.你这个系统或者功能给什么人用的
2.你这个系统或者这个功能是为了解决什么问题
这个才是最核心的问题
基于问题去开发 或者说解决了什么痛点
基于角色的划分 角色的职能
电商系统
1. 给淘宝卖家 淘宝买家 建立联系
1.用户 买东西
2. 卖东西(运营的角色)
3. 管理者
管理者最关心的东西就是我这个电商系统能挣多少钱 报表形式
做需求第一步就是规划用户群体,什么人用这个
规划完用户群体之后 画一个主线流程 比如说淘宝购物 细化购物流程
对于电商来说一个闭环链路 或者说闭环流程 ,然后再画个业务流程的时许图
基于时序图规划具体的大概模块,以及梳理业务流程顺序,然后写出大概的业务逻辑
基于时序图规划功能模块,
对于我们做任何一个系统 做任何分析和架构设计 一定要搞明白这个系统给谁用
每个人在这个系统里面 通过这个系统能够解决他的什么痛点 并且承担什么杨的职责
基于客户群体的划分 设计各个用户的功能
管理者关心通过你这个电商系统我能够专多少钱 报表展示
做需求分析第一步就是 用户群体规划出来 就是什么人用这个
我们做任何一个系统 做需求分析的时候要考虑第一个问题就是这个系统要给谁用
每个人在这个系统中 通过这个系统解决了他的什么痛点,并且承担了什么职责
作为公司的cto 做技术选型的时候 使用那种编程语言?
c java php? 使用那些技术架构 直接上云 微服务 是不是最新的技术就是最适合我们的技术
深入理读淘宝的这10年
支撑一个好的架构,是根据业务发展的 是先做出来,出问题了再慢慢变化
只有业务和技术结合在一起才是有用的
用到什么技术 尽可能和业务挂钩,因为你的项目中运行过程中出现什么问题,才会引入这个技术
比如说高并发场景下 我们使用redis来解决我们数据库的性能io问题 达到我们高吞吐
我作为cto
对于我的团队而言 我运用这款技术之后,出了问题我的团队的能力能不能hold住
选择这款技术,生态圈是否是完善的,出了问题能不能解决
调研我以后的业务量 以及可能应对的用户量以及系统的并发指标
适合这种技术吗
-----------------------------------------------------
如何进行多数据源的管理
1.现在都是基于Springboot springcloud构建的多模块系统,呢么针对于后台管理系统可能会涉及到多个库表, 因为分布式多模块的思想 会吧各自的库进行分开和隔离, 但是基于整个后台管理系统 该怎么管理多个数据源呢
订单单独拉了一个库 (后期做分库分表用的)
比如说产品商品 分类会直接crud到表
我后台管理系统要同时查询多个库的表 ()
这个时候涉及一个 我要同时管理很多数据库 我们怎么进行跨数据库的管理
因为但数据库的开发大家都很熟悉 如果数据库多了 怎么办??????
怎么进行多数据源的管理
当然我也可以通过openfeign 来调用多个服务进行查询
在微服务模块下库划分了很多模块
后台管理系统大部分数据都是由我们的管理系统直接操作 前端的Crud --->我要同时管理很多数据库 此时怎么做跨数据库的管理 因为单数据库开发都很熟悉 如果数据库多了 怎么办
1.怎么进行多数据库的管理
比如说我现在2个库,
正常业务逻辑 基于一个表进行查询 但是我现在要达到的效果是 并且是一个项目的
我项目中现在配置了2个数据源 一个dataSource1 一个dataSource2
具体看这里
https://blog.youkuaiyun.com/guoguo0717/article/details/124795657
基于Springjdbc的这种方案可以做
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
# 配置类
@Configuration
public class DataSourceConfig {
# 读取spring.datasource.datasource1 生成@Bean
@Bean
@ConfigurationProperties(prefix = "spring.datasource.datasource1")
public DataSource dataSource1() {
// 底层会自动拿到spring.datasource中的配置, 创建一个DruidDataSource
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.datasource2")
public DataSource dataSource2() {
// 底层会自动拿到spring.datasource中的配置, 创建一个DruidDataSource
return DruidDataSourceBuilder.create().build();
}
@Bean
public DataSourceTransactionManager transactionManager1(DynamicDataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
@Bean
public DataSourceTransactionManager transactionManager2(DynamicDataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
}
@Component
@Primary // 将该Bean设置为主要注入Bean
public class DynamicDataSource extends AbstractRoutingDataSource {
// 当前使用的数据源标识
public static ThreadLocal<String> name=new ThreadLocal<>();
// 写
@Autowired
DataSource dataSource1;
// 读
@Autowired
DataSource dataSource2;
// 返回当前数据源标识
@Override
protected Object determineCurrentLookupKey() {
return name.get();
}
@Override
public void afterPropertiesSet() {
// 为targetDataSources初始化所有数据源
Map<Object, Object> targetDataSources=new HashMap<>();
targetDataSources.put("W",dataSource1);
targetDataSources.put("R",dataSource2);
super.setTargetDataSources(targetDataSources);
// 为defaultTargetDataSource 设置默认的数据源
super.setDefaultTargetDataSource(dataSource1);
super.afterPropertiesSet();
}
}
在发起调用的时候 我们只需要配置好了就可以
当然我们也可以自定义注解配置 进行aop配置
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WR {
String value() default "W";
}
第二种方案我们可以项目中导入这个包 这个包是mybatisPlus中团队做的
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
#我们同样是 是配置我们的Yaml
spring:
datasource:
dynamic:
#设置默认的数据源或者数据源组,默认值即为master
primary: master
#严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/datasource1?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
username: root
password: root
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
driver-class-name: com.mysql.cj.jdbc.Driver
slave_1:
url: jdbc:mysql://127.0.0.1:3306/datasource2?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
username: root
password: root
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
driver-class-name: com.mysql.cj.jdbc.Driver
在使用时我们只需要@Ds标注即可
这样框架帮我们做了动态数据源的切换 我们只需要@Ds指定数据源的名字
@DS 好处就是框架帮我们做了 也是mybatis官方推荐的方式
但是他们的原理跟咱们之前的原理差不多 一般也都使用第三种
方便 可以吧yaml中的内容配置在nacos中 使用nacos作为配置中心
就像我这个后台管理系统一样, 吧所有的数据库都配置在了数据库文件中
Cboard 报表 拖拉拽的报表开发系统 配置数据源就可以 报表系统可以用
这些来配置 或者帆软Bi