2015-01-22 3 views
3

Ruby/Rails (Grape, Rails-API 등)를 사용하여 사용자 지향 웹/모바일을 제공하는 (마이크로) 서비스를 빌드하는 중입니다. 응용 프로그램. 이러한 서비스는 독립형/격리 형이지만 모델/엔터티간에 일부 서비스 간 관계가 필요합니다.다른 서비스/API (Ruby/Rails 모델 관계)

has_one/belongs_to 관계의 경우 로컬 컴퓨터에 ID 외부 엔터티를 저장하거나 그 반대로 저장할 수 있습니다. 내가 직면 한 문제는 has_many/belongs_to 또는 has_many/has_many 관계를 처리하는 방법입니다. 내가 모 놀리 식 레일 응용 프로그램에 OrderProduct 모델을 한 경우

예를 들어, 나는 다음을 수행하게 서로 다른 서비스를 처리 할 때

class Order < ActiveRecord::Base 
    has_many :products, through :order_products 
end 

class Product < ActiveRecord::Base 
    has_many :orders, through :order_products 
end 

class OrderProduct < ActiveRecord::Base 
    belongs_to :order 
    belongs_to :product 
end 

어떻게 관계의 유형을 처리 할 수 ​​있습니까? 이 작업을 수행 할 '레일 방식'이 있습니까?

내가 지금까지 생각해 본 가장 좋은 방법은 PosturgSQL의 hstore 열과 같은 것을 사용하여 해외 ID을 해시로 저장하는 것이지만 확장 성과 데이터 무결성 측면에서 모두 잘못된 것으로 느껴집니다.

도움이 될 것입니다.

+0

주문과 제품 간의 관계가 정확히 다른 것은 무엇입니까? 주문을 하나의 서비스에, 제품을 다른 서비스에 넣고 있습니까? –

+0

나는이 똑같은 문제에 궁금해. 내 상황에서는 사용자 서비스 및 사용자를 활용하는 다른 서비스 (별도의 서비스에서 작성자 ID를 생각하는)가 있습니다. 또 다른 예는 태그 지정 서비스 또는 주석 서비스입니다. 저는 API 게이트웨이가 서로 의사 소통하는 가장 좋은 방법이라고 생각합니다. 내 질문은 API 게이트웨이가 이들을 함께 꿰맬 수 있도록 이러한 모델을 노출하는 기본 방법은 무엇입니까? – thekoehl

답변

0

이 서비스는 독립형/격리 형이지만 모델/엔터티간에 일부 서비스 간 관계가 필요합니다.

레일 방법은 (TM)은 이러한 관계에 대한 획일적 애플리케이션을 가지고있다.

이러한 제약이 있고 "마이크로 서비스"를 구축하는 경우 - 내 의견으로는 플랫폼을 잘 설계하지 못하는 것입니다.

0

가장 좋은 방법은 OrderProduct라는 마이크로 서비스를 만들고 order_id와 product_id를 서로 연관시키는 테이블을 만드는 것입니다.

또는 Order와 OrderProduct를 하나의 서비스에, Product를 다른 서비스에 넣을 수 있습니다. 그러면 주문을 원하면 product_id로 검색하면 주문을 받게됩니다.

나는 말할 필요가 없다고 생각하지만, 당신은 다른 서비스에서 하나의 서비스와 주문에 Product와 OrderProduct를 넣을 수 있습니다.

0

주문 및 제품이 별도의 서비스로 간주됩니다.

마이크로 서비스를 개발할 때 가장 어려운 부분은 경계를 정의하는 것입니다. 즉, 어떤 기능이 어떤 마이크로 서비스에 속하는지.이것은 서비스를 만들기 전에 놀랍도록 어렵습니다. 그리고 일부 사람들은 모 놀리 식 응용 프로그램을 먼저 작성한 다음 마이크로 서비스를 잘라내라고 제안합니다.

왜 대답해야 할 큰 질문은 주문과 제품이 별도의 서비스로 제공되는 이유입니까? 어떻게 그들을 분리하기로 결정 했습니까? 같은 서비스를받는 것이 더 합리적입니까?

귀하의 질문에 대한 답변은 주문 및 제품에 액세스 할 서비스가 무엇인가에 달려 있다고 생각합니다. 하나의 서비스가 둘 모두에 액세스해야합니까?

하나의 서비스에 외래 키 ID 배열을 저장할 수 있습니다. 이것은 한 서비스가 다른 서비스로부터 데이터를 가져와야하는 경우에만 작동합니다. 이는 "단순히 로컬 모델 내에 외국 엔티티의 ID를 저장하는 것"과 같은 것입니다. 유일한 차이점은 ID의 배열을 저장한다는 것입니다.

그러나 두 서비스 모두에서 배열을 저장해야하기 때문에 다른 쪽에서 has_many 관계에 대해 알아야 할 수도 있습니다. 이 경우에는 디자인이 좋지 않다고 생각합니다. 두 서비스에서 데이터를 복제해야합니다. 이렇게하면 데이터가 동기화되지 않게됩니다.

하나의 가능한 솔루션은 두 서비스간에 데이터베이스를 공유하는 것입니다.