我们最近开始使用 Go 来开发新的微服务。每个微服务都是一个 Go 模块,我们将它们作为单一存储库进行管理:
/
services/
s1/
go.mod
main.go
s2/
go.mod
main.go
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在我们需要在s1和之间共享一些代码s2- 两个服务使用的一些结构、上传到 S3 的函数等。
处理这种情况的正确方法是什么?common理想情况下,我会在存储库根目录( 的同级目录)中有一个目录,并将通用代码放在那里 - 但是 Go 在编译和 时services如何从那里获取代码?s1s2
我正在创建一个微服务,负责处理zip和tar文件的归档和解压缩.
我知道微服务应该专注于一个业务功能(BF).但是,当我想到业务功能时,我应该意味着存档和取消归档(1个BF),归档和单独的归档(2个BF)或压缩,去皮,解压缩,解压(4个BF)?
是否有理由更喜欢其中一种选择呢?
我有一个单一的应用程序,单个进程有5个线程.每个线程完成某些特定任务.考虑使用docker将此应用程序移至微服务.如果我查看架构,每个工作线程将成为一个docker进程.因此,在我的案例中,Monolithic vs Microservices在某些方面变得更像Thread and Process讨论.
拥有单片的最初想法是拥有性能线程并共享相同的内存.现在有了微服务拱,我被推到了一个可能不适合从性能角度来看的流程模型.
我有点坚持如何处理这个问题.
我正在设计微服务架构中的评论分析平台。
应用程序如下所示;
我有3个微服务。
问题出在某个时候,验证服务需要获得站点a的所有评论,应用验证规则并生成错误(如果有)。我知道共享数据库架构和实体会破坏微服务架构。
一种可能的解决方案是
这种方法的两个可能的缺点是
那么,在没有服务的情况下在微服务之间共享海量数据的最佳实践是什么?
我阅读了很多有关使用消息传递队列的信息,但是我认为使用消息传递队列共享千兆字节的数据并不好。
编辑1:除了共享实体,还可以将数据存储区与rest API一起使用是一种解决方案?假设我正在使用mongodb,而不是在微服务之间共享我的实体对象,我可以使用mongo的rest接口(http://restheart.org/)并尽可能查询数据。
我想建立一个微服务架构。我正在使用Java技术,例如Spring,Hibernate等。在这种情况下,我将实体作为Java类。例如,A微服务具有A实体,B微服务具有B实体,依此类推。因此,如果A和B之间存在一对多的关系,则需要将其中一个类导入其他类以进行声明。
// in A microservice
// need to import class of B like "import com.project.B", but can't
// because, it is different project.
@Entity
class A{
@OneToMany
B b;
}
//in B microservice
@Entity
class B{
}
Run Code Online (Sandbox Code Playgroud)
但是,由于微服务设计,它们都位于不同的包或服务中。我是否应该创建另一个项目作为共享库,包括其中的所有实体,然后将其包含在每个微服务中?您还有其他解决方案吗?
我们有两种不同的微服务客户服务和订单服务.客户服务商店有关客户的信息,即名称,DOB等.订单服务将管理客户所下的订单,即订单号,成本等.这是将客户唯一参考/ ID传递给订购服务的最佳方式.
解决方案1:客户ID是客户服务中唯一的GUID.这将传递给订单服务
解决方案2:在客户服务中生成业务/人员友好的唯一代码,并将其传递给订单服务
解决方案3:还有别的吗?
我正在使用Spring Cloud来创建微服务架构.
我使用的是Spring Cloud中的以下功能
现在让我们说如果我有100个微服务,那么我们需要100个服务器来维护每个微服务.所以我想用Kubernetes通过在一个单独的泊坞窗容器部署每个微服务,所以现在因为Kubernetes照顾microserivice健康检查,自动缩放,负载平衡,所以我需要再次使用丝带,尤里卡和Zuul来解决这个问题.
任何人都可以帮我这个
Nutshell解释:
构建一个非常基本的Eureka Discovery服务器spring boot 2.0.4.还创建了一个使用Eureka发现的基本Eureka服务.启动发现服务器,然后启动该服务.该服务向发现服务器注册,但随后立即取消注册并停止.
详细信息Discovery Server代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
服务:请注意,本例中我将Controller放在主启动应用程序中.
@EnableDiscoveryClient //Want it to registger with the discovery
@SpringBootApplication
@RestController //Obviously not a best practice just an example
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
@Value("${spring.application.name")
private String instance;
@RequestMapping("/")
public String message() {
return "hello from " + instance;
}
}
Run Code Online (Sandbox Code Playgroud)
服务pom.xml:
<?xml …Run Code Online (Sandbox Code Playgroud) 刚读完Nigel Poulton的The Kubernetes Book,但我对服务有点不解.
是否可以以某种方式将服务添加到部署清单中?或者服务是否必须自行发布?部署的全部目的不是指定应用程序运行所需的所有内容吗?
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: hello-deploy
spec:
replicas: 10
selector:
matchLabels:
app: hello-world
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-pod
image: nigelpoulton/k8sbook : latest
ports:
- containerPort: 8080
Run Code Online (Sandbox Code Playgroud) 我想创建一个微服务来并行处理我通过pushAzure Service Bus 获得的一些任务。如果任务成功完成,此微服务将通知Azure服务总线。请参见下图:
我已经考虑了以下三个选项:
由于先决条件之一就是该微服务必须位于.NET Core 3中,因此是否有使用Web Jobs代替Hosted Services的正当理由?哪个选项可确保鲁棒性和可扩展性?
microservices ×10
docker ×2
java ×2
kubernetes ×2
architecture ×1
cloud ×1
entity ×1
go ×1
hibernate ×1
monorepo ×1
process ×1
rest ×1
soa ×1
spring ×1
spring-boot ×1
spring-cloud ×1
wcf ×1
worker ×1